JavaNIO无法写入文件,老式文件可以工作。什么';怎么了`
下面的MWE展示了我对如何使用nio编写文件的理解。但是,打开文件时失败。为了证明目录没有问题,在同一个项目、同一个目录中写入了一个旧的学校文件。nio代码有什么问题 错误:线程“main”java.nio.file.NoSuchFileException:test.dat中出现异常。请注意,该选项设置为“创建”,该选项应写入现有文件或创建新文件JavaNIO无法写入文件,老式文件可以工作。什么';怎么了`,java,file,nio,Java,File,Nio,下面的MWE展示了我对如何使用nio编写文件的理解。但是,打开文件时失败。为了证明目录没有问题,在同一个项目、同一个目录中写入了一个旧的学校文件。nio代码有什么问题 错误:线程“main”java.nio.file.NoSuchFileException:test.dat中出现异常。请注意,该选项设置为“创建”,该选项应写入现有文件或创建新文件 import java.io.*; import java.nio.*; import java.nio.file.*; import java.ni
import java.io.*;
import java.nio.*;
import java.nio.file.*;
import java.nio.channels.*;
public class FastWritenio {
public static void writeUsingPrintWriter() throws IOException {
PrintWriter pw = new PrintWriter(new FileWriter("test.txt"));
pw.print("testing");
pw.close();
}
public static void writeUsingnio(int numTrials, int bufferSize, int putsPer) throws IOException {
String filename = "test.dat";
java.nio.file.Path filePath = Paths.get(filename);
WritableByteChannel channel = Files.newByteChannel(filePath, StandardOpenOption.CREATE);
ByteBuffer buf = ByteBuffer.allocate(bufferSize);
for (int t = 0; t < numTrials; ++t) {
for (int i = 0; i < putsPer; i ++) {
buf.putInt(i);
}
buf.flip(); // stop modifying buffer so it can be written to disk
channel.write(buf); // Write your buffer's data.
}
channel.close();
}
public static void main(String[] args) throws IOException {
writeUsingPrintWriter();
writeUsingnio(16, 8*1024, 1024);
}
}
import java.io.*;
导入java.nio.*;
导入java.nio.file.*;
导入java.nio.channels.*;
公共类FastWritenio{
public static void writeUsingPrintWriter()引发IOException{
PrintWriter pw=新的PrintWriter(新的文件编写器(“test.txt”);
印刷品(“测试”);
关闭();
}
公共静态void writeUsingnio(int numTrials、int bufferSize、int putsPer)引发IOException{
字符串filename=“test.dat”;
java.nio.file.Path filePath=Path.get(文件名);
WritableByteChannel通道=Files.newByteChannel(文件路径,StandardOpenOption.CREATE);
ByteBuffer buf=ByteBuffer.allocate(缓冲区大小);
对于(int t=0;t
从以下内容中获取:
两种newbytechnel
方法都允许您指定OpenOption选项列表。除了一个选项之外,还支持newOutputStream
方法使用的相同打开选项:READ
是必需的,因为seekablebytechnel
同时支持读取和写入
指定READ
打开读取通道。指定WRITE
或APPEND
打开写入通道。如果未指定这些选项,则打开通道进行读取
您的OpenOptions
不足。设置WritableByteChannel通道=Files.newByteChannel(文件路径,StandardOpenOption.CREATE,StandardOpenOption.APPEND)在您的示例中,code>在Windows上创建文件,但最终导致缓冲区溢出
来自:
两种newbytechnel
方法都允许您指定OpenOption选项列表。除了一个选项之外,还支持newOutputStream
方法使用的相同打开选项:READ
是必需的,因为seekablebytechnel
同时支持读取和写入
指定READ
打开读取通道。指定WRITE
或APPEND
打开写入通道。如果未指定这些选项,则打开通道进行读取
您的OpenOptions
不足。设置WritableByteChannel通道=Files.newByteChannel(文件路径,StandardOpenOption.CREATE,StandardOpenOption.APPEND)
在您的示例中,在Windows上创建文件,但最终导致缓冲区溢出
无法打开有什么例外?您抢先一步!看到编辑了吗<代码>text.txt!=test.dat
path.get(filename)返回文件的绝对路径,而在PrintWriter中,您正在写入当前目录。path path.get returns有什么问题吗?我如何在当前目录中创建文件?无法打开有什么例外?你抢先一步!看到编辑了吗<代码>text.txt!=test.datpath.get(filename)返回文件的绝对路径,而在PrintWriter中,您正在写入当前目录。path path.get returns是否有问题?如何在当前目录中创建文件?我将把修改后的代码放在问题中,因为虽然它可以工作,但速度非常慢,所以希望有一些问题是非常错误的。如果答案是解决您最初的问题,请随意接受;)@您是否需要在写入后使用buf.compact()
来解决BufferOverflowException
。buf.flip()本身也不起作用。文件打开了,但EJP指出缓冲区溢出。我将把修改后的代码放在问题中,因为虽然它可以工作,但速度非常慢,所以希望有一些事情是非常错误的。如果答案是您最初问题的解决方案,请随意接受它;)@您是否需要在写入后使用buf.compact()
来解决BufferOverflowException
。buf.flip()本身也不起作用。文件将打开,但EJP指出缓冲区溢出。