java - 有没有办法在 Java 中生成 8.3 或 'short' (Windows) 版本的文件名?

标签 java windows runtime.exec

在我们的应用程序中,我们允许用户打开文件和目录。

Java 6 为我们提供了...

java.awt.Desktop.getDesktop().open(file);

效果很好。不过,由于我们需要保证Java 5的兼容性,所以我们还实现了一个通过调用cmd.exe中的start命令来打开文件的方法...

String command = "cmd.exe start ...";
Runtime.getRuntime().exec(command);

这就是问题出现的地方。看来start命令只能处理8.3文件名,这意味着任何非短 (8.3) 文件/目录名都会导致 start 命令失败。

有没有一种简单的方法来生成这些短名称?或者有其他解决方法吗?

最佳答案

尝试这样的事情

import java.io.IOException;

class StartExcel {
    public static void main(String args[])
        throws IOException
    {
        String fileName = "c:\\temp\\xls\\test2.xls";
        String[] commands = {"cmd", "/c", "start", "\"DummyTitle\"",fileName};
        Runtime.getRuntime().exec(commands);
    }
}

将虚拟标题传递给 Windows 启动命令非常重要,因为文件名可能包含空格。这是一个特点。

关于java - 有没有办法在 Java 中生成 8.3 或 'short' (Windows) 版本的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972559/

相关文章:

java - 表示邻接矩阵/列表

java - 为了保持一致性,在 Github 中包含 .jar 文件

java - 运行时exec输出路径

java - Logcat 多次重定向到文件

java - 在 REST API 中使用 GET 请求放置许多请求参数

java - org.xml.sax.SAXParseException : The content of elements must consist of well-formed character data or markup

c# - 如何在C#中重新加载U盘?

linux - 阻塞套接字和非阻塞套接字有什么区别? (对于 realz 版)

windows - 在 python 上使用 ctypes 不显示多个消息框

java - 如果外部程序挂起,如何退出进程 (.exec())