我正在尝试将文件写入Java中的特定目录。我已经在Stack Overflow论坛中查看了许多与此相关的问题。然而,我尝试的每一种方法最终都会出现这个错误:
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at mainFiles.fileManagers.NewCSV.nJSON(NewCSV.java:40)
at mainFiles.appWindows.UserDashboard$1.run(UserDashboard.java:30)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
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$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
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)
代码:
public static void nJSON(String username) {
File file = new File("src/jsonFiles/" + username + ".json");
try {
if (file.exists() && file.isDirectory()) {
System.out.println(username + ".json exist.");
} else {
json.put("Username", username);
json.put("Password", mainFiles.windowsSrc.UserInfo.password);
file.createNewFile();
FileWriter writer = new FileWriter(file);
FileOutputStream os = new FileOutputStream(file);
writer.write(json.toJSONString());
writer.flush();
os.close();
writer.close();
System.out.println(username + ".json created.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
关于如何将文件写入某个目录的任何建议?
答案 0 :(得分:6)
关于您的代码的一些评论:
在文件之前创建父目录。您无法在不存在的目录中创建文件。
O(n^2 * k)
删除FileOutputStream代码。您同时对同一文件使用FileWriter和FileOutputStream。这是一个错误,因为可能会覆盖另一个,导致文件在写入后立即被清除。
不需要createNewFile()。只要目录存在,FileWriter或FileOutputStream就可以创建它自己的文件(参见#1)。
关闭finally块中的编写器,以确保即使在写入过程中发生异常也会关闭基础流。
我不确定isDirectory检查是针对什么的。如果它存在,肯定它将是一个文件而不是一个目录。无论哪种方式,file.getParentFile().mkdirs();
都是不必要的,因为isDirectory已经检查了存在。
file.exists() && file.isDirectory()
答案 1 :(得分:0)
尝试运行此代码:
package com.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class WriteFile {
public static void main(String[] args) {
nJSON("test");
}
public static void nJSON(String username) {
File file = new File("/home/ivan/Downloads/" + username + ".json");
try {
if (file.exists() && file.isDirectory()) {
System.out.println(username + ".json exist.");
} else {
String content = "testing";
file.createNewFile();
FileWriter writer = new FileWriter(file);
FileOutputStream os = new FileOutputStream(file);
writer.write(content);
writer.flush();
os.close();
writer.close();
System.out.println(username + ".json created.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class WriteFile {
public static void main(String[] args) {
nJSON("test");
}
public static void nJSON(String username) {
File file = new File("/home/ivan/Downloads/" + username + ".json");
try {
if (file.exists() && file.isDirectory()) {
System.out.println(username + ".json exist.");
} else {
String content = "testing";
file.createNewFile();
FileWriter writer = new FileWriter(file);
FileOutputStream os = new FileOutputStream(file);
writer.write(content);
writer.flush();
os.close();
writer.close();
System.out.println(username + ".json created.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
只需将home / ivan / Downloads /替换为有效的目录路径即可。它基本上是你的代码,简单的json。它可以在我的机器上运行,所以我怀疑你正在尝试写入不存在的目录。