Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/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
使用java.nio从另一个文件读取后,无法写入文件_Java_Nio - Fatal编程技术网

使用java.nio从另一个文件读取后,无法写入文件

使用java.nio从另一个文件读取后,无法写入文件,java,nio,Java,Nio,我正在尝试读取一个.java文件,并尝试使用下面的代码将其写入另一个文件 import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; publi

我正在尝试读取一个.java文件,并尝试使用下面的代码将其写入另一个文件

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

public class JavaToHtml
{
    private Path actualPath;
    private Path targetPath;
    private Path sourcePath;

    private BufferedReader reader;
    private BufferedWriter writer;

    public JavaToHtml(String source, String target)
    {
        sourcePath = Paths.get(source);
        sourcePath = sourcePath.toAbsolutePath();
        actualPath = Paths.get(target);
        targetPath = actualPath.toAbsolutePath();

        Charset charset = Charset.forName("US-ASCII");

        try
        {   
            reader = Files.newBufferedReader(sourcePath, charset);
            writer = Files.newBufferedWriter(targetPath, charset);

            String line = null;
            while((line = reader.readLine()) != null)
            {
                            // This thing is working.
                System.out.println(line);
                            // This thing is not working.
                writer.write(line, 0, line.length());
            }
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        new JavaToHtml(args[0], args[1]);
    }
}
现在的问题是,在我的while循环中,我可以毫无问题地读取源文件,但是创建的新文件(目标)总是空的。此外,编译器在编译时和运行时都不会抛出错误。我做错什么了吗?请让我看看,因为这是我的第一个问题


当您不再需要BufferedWriter和BufferedReader时,请不要忘记关闭它们:

reader.close();
writer.close();
发件人:

缓冲输入流从称为缓冲器的存储器区域读取数据; 只有当缓冲区为空时,才会调用本机输入API。 类似地,缓冲输出流将数据写入缓冲区,并且 只有当缓冲区已满时,才会调用本机输出API


使用
close()
调用,隐式地告诉它刷新缓冲区并关闭它…

另一个选项是将所有数据保存到字符串中,然后使用writer.write(str)将该字符串写下来。这仅在数据不是太大的情况下有效(否则会出现内存不足异常)。 每次添加一行时,还应刷新写入程序,以确保所有内容都已存在:

writer.flush()

执行flush(),写入程序将文件的内容打印到文件上,这样就可以将缓冲区从已放置的内容中释放出来。

您应该详细说明一下,并解释为什么如果缓冲流未关闭(实际上已刷新),则不会写入任何内容,坚持这两件事都应该在最后一个街区结束。@PrimosK:谢谢,结束这两件事为我解决了问题。但是你能解释一下为什么会这样吗?祝福你。Regards@JBNizet当前位置你能告诉我为什么会发生这种情况吗?把这两件事都解决了?RegardsA buffered writer,顾名思义,将写入它的字符缓冲在内存中的内部缓冲区中。一旦缓冲区已满,缓冲写入程序实际上会将缓冲区的内容写入文件,然后清除缓冲区。您还可以通过调用flush命令它写入文件流。当写入程序关闭时,将自动调用flush。因此,如果不刷新缓冲区,所有内容都会保留在内存中,不会向文件写入任何内容。继续:还必须关闭写入程序以关闭底层文件描述符(这是一个有限的操作系统资源),并确保其余代码和其他进程可以在不等待JVM退出的情况下打开文件。这就是为什么在finally块中关闭它非常重要的原因,即使抛出异常,finally块也保证执行。阅读JavaIO教程。write方法中的offset参数是从给定字符串开始的偏移量。它用于编写给定参数的子字符串。这句话很好,我才意识到。谢谢你的信息。实际上,有两个人头脑清醒了;)编辑了我对非州废话的回答。谢谢你提供的信息。Regards@GagandeepBali很抱歉在这里发帖,为什么你的网站不能正常工作?@joeyrohan:事实上,我是在家里的电脑上免费托管这个网站的。因此,当我关闭计算机时,该站点也会关闭:-)。我让我的电脑开了几个星期,但现在有几天我开始每天关机:(虽然我的电脑现在开着,我想它能工作:-),我可能明天就关机。@GagandeepBali刚刚给你发了一条消息……希望你能收到。@joeyrohan:我想你可能需要再发一次那条消息。我的人际网络最近似乎遇到了一些问题:(