【问题标题】:Java desktop app cannot write a file on C:\ driveJava 桌面应用程序无法在 C:\ 驱动器上写入文件
【发布时间】:2011-11-22 18:00:40
【问题描述】:

我正在尝试在 C:\ 驱动器上写入文件,但出现异常。

java.io.IOException: 访问被拒绝。

代码:

public class Test {

    public static void main(String[] args) {
        try {
            StringBuilder sb = new StringBuilder(File.separator);
            sb.append("index.txt");
            // sb is "\\index.txt"
            File f = new File(sb.toString());
            boolean isCreated = f.createNewFile();
            System.out.println(isCreated);
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

实际上,我明白了,我没有权限在那里写文件,但我很确定它可以以某种方式完成。如果我有一个小程序,我只是获得一个许可,但在这里,我不知道该怎么做。

可能的解决方案可能是检查我是否可以在那里写一个文件,但要检查它,我可能会先尝试写一个文件然后删除它,以检查是否可以在那里写一个文件,但我没有'找不到此解决方案的最佳方法。

【问题讨论】:

  • 您不需要获取分隔符来定义文件路径。 "/index.txt" 在 Windows 和 Unix 中都可以使用。

标签: java windows file


【解决方案1】:

最简单的检查方法是使用File.canWrite()

话虽如此,看起来您正在写入驱动器的根目录。在 Windows 上这可能不是一个好主意,您可能想考虑在其他地方编写 - 例如temp dir

【讨论】:

  • 我正在尝试编写一个文件,用户希望应用程序在其中编写一个文件,但正如我所见,我必须为用户做一个提示说明,他是否可以在选定的内容中写入地点。
【解决方案2】:

我写了一个方法,它将一个字符串带到一个目录,并检查你是否可以在那里写一个文件:

static boolean canWrite(String folderPath) {
    File file = new File(folderPath);
    String new_file = "HastaLaVistaBaby";
    if (file.isDirectory()) {
        try {
            new File(file + "\\" + new_file).createNewFile();
        } catch (IOException e) {
            return false;
        }
        new File(file + "\\" + new_file).delete();
        return true;
    } else {
        return false;

    }
}

为了改进它,您可以检查是否 file.isFile() 并获取父目录并调用此方法。

【讨论】:

    【解决方案3】:

    这一行应该是:

     sb.append("C:\\index.txt");
    

    多余的反斜杠转义反斜杠。

    无论您是像我一样对文件名进行硬编码,还是从用户那里获取文件名,您都需要完整的路径和文件名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多