我有一个名为 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:\\
答案 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