从Windows,Mac和Linux上的位置检索文件

时间:2014-09-23 19:13:58

标签: java

目前,我有一个Java应用程序需要从目录中复制文件并将其放在桌面上。我有这个方法

public static void copyFileUsingFileStreams(File source, File dest) throws IOException {

    InputStream input = null;
    OutputStream output = null;

    try {
        input = new FileInputStream(source);
        output = new FileOutputStream(dest);
        byte[] buf = new byte[1024];
        int bytesRead;
        while ((bytesRead = input.read(buf)) > 0) { output.write(buf, 0, bytesRead); }
    } 
    finally {
        input.close();
        output.close();
    }
}

我在下面打电话。

copyFileUsingFileStreams(new File("C:/Program Files (x86)/MyProgram/App_Data/Session.db"), new File(System.getProperty("user.home") + "/Desktop/Session.db"));

这在Windows上完美运行。但是,我希望能够在Mac和Linux机器上做同样的事情(位置是/opt/myprogram/App_Data/Session.db)。如何评估运行的计算机是Windows还是Mac / Linux,以及如何相应地重构我的代码?

2 个答案:

答案 0 :(得分:1)

您可以使用System.getProperty之类的

获取操作系统信息
String property = System.getProperty("os.name");

此外,您可以使用Files.copy()来简化代码(如果您想要更多控制权,请使用StandardCopyOption)。 e.g。

Files.copy(src, Paths.get("/opt/myprogram/App_Data/Session.db"));

所以你更新的代码看起来像这样

public static void copyFileUsingFileStreams(File source, File dest) throws IOException {
    String property = System.getProperty("os.name");

    if (property.equals("Linux")) {
        dest = Paths.get("/opt/myprogram/App_Data/Session.db").toFile();
    }               
    //add code to adjust dest for other os.
    Files.copy(source.toPath(), dest.toPath());
}

答案 1 :(得分:0)

您可以使用

确定操作系统名称
System.getProperty("os.name")