Java桌面应用程序无法在C:\驱动器上写入文件

时间:2011-11-22 18:00:40

标签: java windows file

我正在尝试在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);
        }
    }
}

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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()并获取父目录并调用此方法。

答案 2 :(得分:0)

这一行应该是:

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

额外的反斜杠会逃避反斜杠。

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