在java中创建一个文件,目录在文本文件中

时间:2015-09-08 20:27:08

标签: java file directory createfile

我有一个名为 backUp.dat 的文本文件。该文件包含目录路径,因此我创建了一个简单的方法来读取该文件:

public static String readFileAsString(String filename) {
    BufferedReader reader;
    try {
        reader = new BufferedReader(new FileReader(filename));
        String line;
        StringBuilder sb = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        reader.close();
        //System.out.println("Current Directory:"+ new File(".").getAbsolutePath());
        return sb.toString();
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Welcome.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, "Il Manque un Fichier de System Contactez Votre Fournisseur","ERREUR",JOptionPane.ERROR_MESSAGE);
        System.exit(0);
    }    catch (IOException ex) {  
        Logger.getLogger(Welcome.class.getName()).log(Level.SEVERE, null, ex);
    }  
    return null;
}

这项工作非常完美,但问题在于:

String dir = readFileAsString("backUp.dat");               
File fileEES = new File(dir+"backUp.XML");
if (fileEES.createNewFile()) {
    System.out.println("File is created!");
} else {
    System.out.println("File already exists.");
}

我得到了这个例外:

sept. 08, 2015 10:22:28 PM credittaxiphone.FirstWindow exporterUserInfo
GRAVE: null
java.io.IOException: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1012)
    at credittaxiphone.FirstWindow.exporterUserInfo(FirstWindow.java:565)
    at credittaxiphone.FirstWindow.exit(FirstWindow.java:116)
    at credittaxiphone.FirstWindow.formWindowClosing(FirstWindow.java:413)
    at credittaxiphone.FirstWindow.access$100(FirstWindow.java:42)
    at credittaxiphone.FirstWindow$1.windowClosing(FirstWindow.java:179)
    at java.awt.Window.processWindowEvent(Window.java:2058)
    at javax.swing.JFrame.processWindowEvent(JFrame.java:305)
    at java.awt.Window.processEvent(Window.java:2017)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

在线:

File fileEES = new File(dir + "backUp.XML");

如果我删除dir,它就能正常运行。

backUp.dat 的内容是:

  

d:\\

2 个答案:

答案 0 :(得分:2)

文件名错误的原因很可能是您追加到readFileAsString中每个读取行的换行符。如果您希望backUp.dat仅包含目录路径,则不应附加任何换行符。

添加dir"backUp.XML"时要小心:可能需要目录分隔符File.separatorChar)。

答案 1 :(得分:0)

如果查看JavaDocs,您将看到您尝试使用的File构造函数将父目录作为第一个参数,将文件名作为第二个参数。

以下是您目前拥有的代码:

String dir=readFileAsString("backUp.dat");               
File fileEES = new File(dir+"backUp.XML");

但是API需要这样的东西:

File dir = new File(readFileAsString("backUp.dat"));
File fileEES = new File(dir, "backUp.XML");

请注意,这些示例并未说明正确的异常处理。有关完整参考,请参阅JavaDoc

  

公共文件(文件父级,               String child)

     

从父抽象路径名和a创建一个新的File实例   子路径名字符串。

     

如果parent为null,则创建新的File实例,就像创建一样   在给定子节点上调用单参数File构造函数   pathname string。

     

否则父抽象路径名用于表示目录,   并且子路径名字符串用于表示目录或   一份文件。如果子路径名字符串是绝对的,那么它将被转换   以系统相关的方式转换为相对路径名。如果父母是   空抽象路径名然后创建新的File实例   将子项转换为抽象路径名并解析结果   针对系统相关的默认目录。否则每个路径名   string被转换为抽象路径名和子抽象   pathname是针对父级解析的。

     

参数:       parent - 父抽象路径名       child - 子路径名字符串抛出:       NullPointerException - 如果child为null