当前位置: 首页 > 面试题库 >

Java:打开文件(Windows + Mac)

顾单弓
2023-03-14
问题内容

我有一个打开文件的Java应用程序。这在Windows上可以完美运行,但在Mac上则不能。

这里的问题是我使用Windows配置将其打开。代码是:

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file);

现在我的问题是在Mac中打开它的代码是什么?还是有另一种方法可以打开可在多平台上使用的PDF?

编辑:

我创建文件如下:

File folder = new File("./files");
File[] listOfFiles = folder.listFiles();

在循环中,我将它们添加到数组中:

fileArray.add(listOfFiles[i]);

如果我尝试使用Desktop.getDesktop()。open(file)从该数组中打开文件,它说找不到该文件(路径混乱,因为我使用“
./files”作为文件夹)


问题答案:

这是一个操作系统检测器:

public class OSDetector
{
    private static boolean isWindows = false;
    private static boolean isLinux = false;
    private static boolean isMac = false;

    static
    {
        String os = System.getProperty("os.name").toLowerCase();
        isWindows = os.contains("win");
        isLinux = os.contains("nux") || os.contains("nix");
        isMac = os.contains("mac");
    }

    public static boolean isWindows() { return isWindows; }
    public static boolean isLinux() { return isLinux; }
    public static boolean isMac() { return isMac; };

}

然后,您可以打开如下文件:

public static boolean open(File file)
{
    try
    {
        if (OSDetector.isWindows())
        {
            Runtime.getRuntime().exec(new String[]
            {"rundll32", "url.dll,FileProtocolHandler",
             file.getAbsolutePath()});
            return true;
        } else if (OSDetector.isLinux() || OSDetector.isMac())
        {
            Runtime.getRuntime().exec(new String[]{"/usr/bin/open",
                                                   file.getAbsolutePath()});
            return true;
        } else
        {
            // Unknown OS, try with desktop
            if (Desktop.isDesktopSupported())
            {
                Desktop.getDesktop().open(file);
                return true;
            }
            else
            {
                return false;
            }
        }
    } catch (Exception e)
    {
        e.printStackTrace(System.err);
        return false;
    }
}

回答您的编辑:

尝试使用file.getAbsoluteFile()甚至file.getCanonicalFile()



 类似资料:
  • 问题内容: 我知道我们应该在问题中添加一些代码,但是我非常傻眼,无法束手无策,也找不到任何可循的例子。 基本上,我想打开文件 C:\ A.txt ,其中已经包含内容,并在末尾写一个字符串。基本上是这样的。 文件A.txt包含: 我想打开它并在末尾写Sue,所以文件现在包含: 抱歉,没有代码示例,今天早上我的大脑死了。 问题答案: 请搜索Larry Page和Sergey Brin向全世界发布的Go

  • 打开文件 有了上述分析后,我们可以看看如果一个用户进程打开文件会做哪些事情?首先假定用户进程需要打开的文件已经存在在硬盘上。以user/sfs_filetest1.c为例,首先用户进程会调用在main函数中的如下语句: int fd1 = safe_open("sfs\_filetest1", O_RDONLY); 从字面上可以看出,如果ucore能够正常查找到这个文件,就会返回一个代表文件的文

  • 在这节,我们使我们的应用程序展示命令行传来的文件的正文。 在这后面,我们为我们的应用程序的窗口子类增加了一个私有的结构体,结构体内是一个指向GtkStack的指针。gtk_widget_class_bind_template_child_private()函数使得在实例化模板后,私有结构体中的stack成员会指向模板中的同名部件。 ... struct _ExampleAppWindowPriv

  • 我需要在我的windows机器到UNIX服务器之间建立一个隧道,并希望自动化这个过程,以便在启动时为我生成隧道。 我用ssh和autossh安装了Cygwin,以连接到远程服务器,手动建立连接,并确认连接正常工作。这个过程涉及3个命令,这并不是很多,但这将是伟大的自动化。 包括。exe文件在内的第一部分用于打开Cygwin窗口,但我没有成功地将脚本输入其中。我甚至尝试在引用脚本文件之前包含一个--

  • 我在WinXP上使用Vim 7.3。我使用由我工作的应用程序生成的XML文件,该应用程序使用UCS-2le编码编写它们。在vim wiki上阅读了几篇关于编码的文章后,我发现给出了以下建议,即在vimrc中设置我的文件编码: 有问题的文件以FF EE为第一个字符(已确认使用HxD查看),但Vim无法正确打开它。我可以在我的vimrc中使用它正确打开我的UCS-2le文件: 但是现在我的UTF-8文

  • 问题内容: 所以现在有适用于Java的 OpenCV …!谁能告诉我如何用它打开Videofiles? 我尝试浏览整个Internet,但一无所获。VideoCapture类的文档不是很有帮助,因为它给出了一个C#示例并显示了如何从网络摄像头捕获。 OpenCV的Q&A也无济于事,因为没有(公开)方法可以向您提供文件名字符串。 但它 应该 按照API的 规定 工作。但是它没有,但是VideoCap