无效的文件路径异常

时间:2017-03-06 14:11:50

标签: java java-7 netbeans-8.2

我的应用程序抛出异常 - java.io.FileNotFoundException:文件路径无效。不知道为什么。我已经阅读了有关主题的问题和答案,但没有人可以帮助我。

以下是代码:

    String userhome = System.getProperty("user.home");
    String filename = null;
    File rdp = null;
    for (int item = 0; item < darab; item++) {
        filename = toValidFileName(ProgramList.get(item).getP_name());
        filename += ".rdp";
        rdp = new File(userhome, filename);
        try {
            JFrame panel;
            panel = new JFrame();
            panel.setSize(400, 10);
            panel.setLocation(300, 400);
            panel.setTitle("Saving " + rdp.getAbsolutePath());

            try (FileOutputStream fstr = new FileOutputStream(rdp)) {
                panel.setVisible(true);
                char c;
                for (int j = 0; j < 2336; j++) {
                    c = ProgramList.get(item).p_body.charAt(j);
                    fstr.write(c);
                }
                fstr.flush();
                fstr.close();
                panel.setVisible(false);
            }

        } catch (IOException ioe) {
            JOptionPane.showMessageDialog(this,
                    ioe.getMessage(), "Save rdp file", JOptionPane.ERROR_MESSAGE);
            System.err.println(ioe.getMessage() + " : "+ rdp.getAbsoluteFile());
        }
    }

结果: 文件路径无效:C:\ Users \ LiPI \ CosmicLd.rdp

toValidFilename()从(KORG RADIAS)程序名称中删除禁用的字符以创建有效的文件名。

我没有发现我的错:( 目标目录不是只读的,用户具有必要的权限。当我在行后查看file.canWrite()时:  rdp = new File(userhome,filename); 它总是错误的。 我做错了什么? 谢谢!

2 个答案:

答案 0 :(得分:0)

请尝试使用filewriter。您的尝试将如下所示:

try {
     File dir = new File("C:/Users//" + userhome + "/Documents"); //customize this however
     FileWriter fstr = new FileWriter(new File(dir, rdp));
          for (int j = 0; j < 2336; j++) {
                c = ProgramList.get(item).p_body.charAt(j);
                fstr.write(c);
                        }
            fw.close(); 
        }

此外,尝试坚持Java变量命名约定。 userhome应该是userHome等。只是一件小事:))

答案 1 :(得分:0)

该问题产生于该行:

filename = toValidFileName(ProgramList.get(item).getP_name());

使用getP_name()结果,因为有时它有(char)0个字符......

代码被重写 - &gt; 无论如何,

toValidFileName代码:

public static String toValidFileName(String input) {
    return input.replaceAll("[:\\\\/*\"?|<>']", "_");
}

谢谢大家的帮助!有一些有用的建议,尤其是Arkady和VGR的建议!