在Ubuntu中使用Java创建文件夹和文件

时间:2013-11-19 08:18:03

标签: java file ubuntu directory

以下是我想做的事情:

  1. 检查文件夹是否存在
  2. 如果不存在,请创建文件夹
  3. 如果存在,则不执行任何操作
  4. 最后在该文件夹中创建一个文件
  5. 在Windows 7中一切正常,但是当我在Ubuntu中运行应用程序时它不会创建文件夹,它只是创建文件夹名称的文件,例如:(我的文件名是xxx.xml和文件夹是d:\ temp,所以在Ubuntu中,文件是在d:生成的,名称为temp \ xxx.xml)。这是我的代码:

    File folder = new File("D:\\temp");
    if (folder.exists() && folder.isDirectory()) {
    } else {
        folder.mkdir();
    }
    
    String filePath = folder + File.separator;
    File file = new File(filePath + "xxx.xml");
    
    StreamResult result = new StreamResult(file);
    transformer.transform(source, result);
    // more code here 
    

7 个答案:

答案 0 :(得分:2)

您的目录(D:\ temp)在Linux上是不合适的。

请考虑使用linux文件系统和File.SEPARATOR常量:

static String OS = System.getProperty("OS.name").toLowerCase();
String root = "/tmp";

if (OS.indexOf("win") >= 0) {
    root="D:\\temp";
} else {
    root="/";
}

File folder = new File(ROOT + "dir1" + File.SEPARATOR + "dir2");

if (folder.exists() && folder.isDirectory()) {
} else {
    folder.mkdir();
}

没试过,但是可以工作。

答案 1 :(得分:1)

Linux系统中不存在

D:\temp(我的意思是它将其解释为就像任何其他的foldername一样)

在Linux系统中,文件分隔符为/,而不是\,就像Windows一样

因此解决方案是:

File folder = new File("/tmp"); 

而不是

File folder = new File("D:\\temp");

答案 2 :(得分:1)

Linux不使用驱动器号(如D :),并使用正斜杠作为文件分隔符。

您可以这样做:

File folder = new File("/path/name/of/the/folder");
folder.mkdirs(); // this will also create parent directories if necessary
File file = new File(folder, "filename");
StreamResult result = new StreamResult(file);

答案 3 :(得分:0)

在类Unix系统上没有逻辑光盘。您可以尝试在/tmp/home上创建 下面是您主目录中创建temp目录的代码:

String myPathCandidate = System.getProperty("os.name").equals("Linux")? System.getProperty("user.home"):"D:\\";
  System.out.println(myPathCandidate);
  //Check write permissions
  File folder = new File(myPathCandidate);
  if (folder.exists() && folder.isDirectory() && folder.canWrite()) {
      System.out.println("Create directory here");
  } else {System.out.println("Wrong path");}

或者,对于/tmp - 系统临时dicecrory。大多数用户可以在这里写:

String myPathCandidate = System.getProperty("os.name").equals("Linux")? System.getProperty("java.io.tmpdir"):"D:\\";

答案 4 :(得分:0)

在Java 7之前,File API可以利用操作系统配置(如RAM磁盘上的临时文件)创建临时文件。由于Java 7使用实用程序函数类Files

答案 5 :(得分:0)

使用System类的getProperty静态方法考虑两种解决方案。

String os = System.getProperty("os.name");

if(os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0 || os.indexOf("aix") > 0 ) // Unix
    File folder = new File("/home/tmp"); 
else if(os.indexOf("win") >= 0) // Windows
    File folder = new File("D:\\temp");
else
    throw Exception("your message");

答案 6 :(得分:0)

从Java 7开始,您可以使用Files实用程序类和新的Path类。 请注意,以下示例中省略了异常处理。

// uses os separator for path/to/folder.
Path file = Paths.get("path","to","file");

// this creates directories in case they don't exist
Files.createDirectories(file.getParent());

if (!Files.exists(file)) {
    Files.createFile(file);
}

StreamResult result = new StreamResult(file.toFile());
transformer.transform(source, result);

这涵盖了一般情况,如果它不存在则创建一个文件夹,并在该文件夹上创建一个文件。


如果你真的想要创建一个临时文件,如你的例子所示,那么你只需要执行以下操作:

// this create a temporary file on the system's default temp folder.
Path tempFile = Files.createTempFile("xxx", "xml");

StreamResult result = new StreamResult(Files.newOutputStream(file, CREATE, APPEND, DELETE_ON_CLOSE));
transformer.transform(source, result);

请注意,使用此方法时,文件名与您使用的前缀不完全对应(xxx,在本例中)。

尽管如此,鉴于它是一个临时文件,这根本不重要。 DELETE_ON_CLOSE保证在关闭时文件将被删除。