具有绝对路径的Java FileNotFoundException - 无法读取或执行,但文件存在

时间:2016-09-02 07:09:43

标签: java filenotfoundexception file-not-found fileutils

我确信这已经得到了解答,但是十个不同的策略在这个问题上没有奏效。

如果我使用C:\ Users \ Anny \ Dropbox \ SocialMediaOcto \ instructions \ Trees \ instructions.txt 作为文件的绝对路径,IDEA无法从此路径读取或执行。如果我采用相同的路径并将其粘贴到Windows资源管理器中,它将立即执行。我不想专注于一个工作目录,因为这个文件作为程序的配置文件工作,但用反斜杠替换斜杠不起作用,绝对路径仍然将我带到文件,但IDEA没有启动。

我的智慧结束了。

 public static String generateFileName(String folder){

    String filename = "";
    List<String> hashtags = new ArrayList<>();
    String instructions_file =         "C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Trees\instructions.txt";

    //does not return true-true, but can launch file on windows explorer..
    System.out.println("FILE EXIST AND EXECUTE?" + new File(instructions_file).getAbsoluteFile().canRead() +" "+new File(instructions_file).getAbsoluteFile().canExecute());

    System.out.println(new File(instructions_file).getAbsoluteFile());
    //C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Trees\instructions.txt

    BufferedReader br = null;

    try {

        String sCurrentLine;

        br = new BufferedReader(new FileReader(new File(instructions_file).getAbsoluteFile()));

修改 用正斜杠替换反斜杠后,阅读器仍无法正确读取或执行该文件。

LOG: 字符串打印:       C:/Users/Anny/Dropbox/SocialMediaOcto/instructions/Bees/instructions.txt

  java.io.FileNotFoundException:    C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Bees\instructions.txt (The system cannot find the file specified)

1 个答案:

答案 0 :(得分:5)

更正网址

String instructions_file = "C:/Users/Anny/Dropbox/SocialMediaOcto/instructions/Trees/instructions.txt";

因为\是Java中的转义字符。如果你想使用\作为角色,你必须自己逃避它。

更正网址v2:

String instructions_file  = "C:\\Users\\Anny\\Dropbox\\SocialMediaOcto\\instructions\\Trees\\instructions.txt";

你有什么:

String instructions_file  = "C:\Users\Anny\Dropbox\SocialMediaOcto\instructions\Trees\instructions.txt";

被java读为

"C:{something}sers{something}nny{something}ropbox{something}ocialMediaOcto{something}nstructions\Trees\instructions.txt"

在我看来,使用第一种方法会更好,因为它的平台安全。