【发布时间】:2023-02-24 03:10:42
【问题描述】:
我想使用缓冲写入器在我上面 6 个文件夹中写入一个文件,但它说它是一个只读文件系统
public static void writeDataToCSVFile() {
try(
BufferedWriter writer = new BufferedWriter(Files.newBufferedWriter(Paths.get("/../../../../../../costumers.csv")));
) {
writer.write("Id;Firstname;Lastname;Street;Housenumber;Postalcode;City;Country");
writer.newLine();
for(Customer customer: CustomerManagement.customers) {
writer.write(customer.convertToCSVString());
writer.newLine();
}
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
java.nio.file.FileSystemException: /../../../../../../costumers.csv: Read-only file system
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218)
at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:484)
at java.base/java.nio.file.Files.newOutputStream(Files.java:228)
at java.base/java.nio.file.Files.newBufferedWriter(Files.java:3008)
at java.base/java.nio.file.Files.newBufferedWriter(Files.java:3056)
at de.volkswagen.fakultaet73.shoppingsystem.management.CustomerManagement.writeDataToCSVFile(CustomerManagement.java:128)
at de.volkswagen.fakultaet73.shoppingsystem.enities.ShoppingSystem.start(ShoppingSystem.java:23)
at de.volkswagen.fakultaet73.shoppingsystem.main.Main.main(Main.java:21)
当我使用绝对文件路径时,如“/Username/Desktop/test.csv”,它有效。
【问题讨论】:
-
“在我之上”是什么意思?相对路径将相对于当前工作目录。这可能符合也可能不符合您对“我”的看法。您检查过
Paths.get("/../../../../../../costumers.csv").toAbsolutePath()` 打印的内容了吗? -
此外:您将新创建的
BufferedWriter包裹在另一个BufferedWriter中。这会起作用,但不会给您带来任何好处(并且会浪费一些内存)。只需删除包装Files.newBufferedWriter调用的new BufferedWriter(...)即可。此时也无需调用flush():关闭编写器将自动为您刷新所有相关缓冲区。 -
以
/开头的路径是绝对路径。如果你想要一个相对路径,删除第一个/。 -
您的操作系统是什么?
标签: java