【问题标题】:Why can't Java create this file on my Ubuntu desktop?为什么 Java 不能在我的 Ubuntu 桌面上创建这个文件?
【发布时间】:2013-10-31 12:53:35
【问题描述】:

我的文件系统上有以下现有目录结构(使用 ext4 的 Ubuntu 12.04 桌面):

/
    home/
        myuser/
            .myapp/
                logs/
                    myapp.log
                data/
                lib/

...以及以下 Java 代码:

try {
    // If no such file exists, create it and write zero (0) to it.
    if(!myFile.exists()) {
        System.out.println("myFile is: " + myFile.getAbsolutePath());
        myFile.createNewFile();
        myFileWriter.write("0"); // Configured to write to myFile
    }
} catch(IOException ioExc) {
    logger.error(ExceptionUtils.getStackTrace(ioExc));
    throw new RuntimeException(ioExc);
}

...这是抛出以下异常:

myFile is: /home/myuser/.myapp/data/replay/Loader-0-replay.log
java.lang.RuntimeException: java.io.IOException: No such file or directory
    at net.myuser.myapp.tools.myapp.Loader.<init>(Loader.java:69)
    at net.myuser.myapp.tools.myapp.MyAppTool.loadWords(MyAppTool.java:125)
    at net.myuser.myapp.tools.myapp.MyAppTool.run(MyAppTool.java:65)
    at net.myuser.myapp.tools.myapp.MyAppTool.main(MyAppTool.java:41)
Caused by: java.io.IOException: No such file or directory
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:900)
    at net.myuser.myapp.tools.myapp.Loader.<init>(Loader.java:62)
    ... 3 more

这里发生了什么?它说“没有这样的文件或目录”,但这不是 createNewFile() 应该为我做的吗?提前致谢!

【问题讨论】:

标签: java file-io ubuntu-12.04 ioexception ext4


【解决方案1】:

/home/myuser/.myapp/data/重播/Loader-0-replay.log

我在您提供的目录列表中没有看到“重播”。

尝试从 myFile 获取父文件,然后调用 File.mkdirs()

【讨论】:

    【解决方案2】:

    您需要在创建文件之前创建文件夹 /home/myuser/.myapp/data/replay。

    你可以试试

    if (!myFile.exists()) {
        System.out.println("myFile is: " + myFile.getAbsolutePath());
        if (!myFile.getParentFile().exists()) {
            myFile.getParentFile().mkdirs();
        }
        myFile.createNewFile();
        myFileWriter.write("0"); // Configured to write to myFile
    }
    

    检查参考:

    【讨论】:

      【解决方案3】:

      试试下面的代码:

      try {
          // If no such file exists, create it and write zero (0) to it.
          if(!myFile.exists()) {
              System.out.println("myFile is: " + myFile.getAbsolutePath());
              if(!myFile.getParentFile().exists())myFile.getParentFile().mkdirs();
              myFile.createNewFile();
              myFileWriter.write("0"); // Configured to write to myFile
          }
      } catch(IOException ioExc) {
          logger.error(ExceptionUtils.getStackTrace(ioExc));
          throw new RuntimeException(ioExc);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多