Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaNIO无法写入文件,老式文件可以工作。什么';怎么了`_Java_File_Nio - Fatal编程技术网

JavaNIO无法写入文件,老式文件可以工作。什么';怎么了`

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

下面的MWE展示了我对如何使用nio编写文件的理解。但是,打开文件时失败。为了证明目录没有问题,在同一个项目、同一个目录中写入了一个旧的学校文件。nio代码有什么问题

错误:线程“main”java.nio.file.NoSuchFileException:test.dat中出现异常。请注意,该选项设置为“创建”,该选项应写入现有文件或创建新文件

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)在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.dat
path.get(filename)返回文件的绝对路径,而在PrintWriter中,您正在写入当前目录。path path.get returns是否有问题?如何在当前目录中创建文件?我将把修改后的代码放在问题中,因为虽然它可以工作,但速度非常慢,所以希望有一些问题是非常错误的。如果答案是解决您最初的问题,请随意接受;)@您是否需要在写入后使用
buf.compact()
来解决
BufferOverflowException
。buf.flip()本身也不起作用。文件打开了,但EJP指出缓冲区溢出。我将把修改后的代码放在问题中,因为虽然它可以工作,但速度非常慢,所以希望有一些事情是非常错误的。如果答案是您最初问题的解决方案,请随意接受它;)@您是否需要在写入后使用
buf.compact()
来解决
BufferOverflowException
。buf.flip()本身也不起作用。文件将打开,但EJP指出缓冲区溢出。