Java 请告诉我为什么下面的代码不起作用?

Java 请告诉我为什么下面的代码不起作用?,java,Java,当我运行代码时,一切正常,但内容没有写入target.txt public class SrtExtractor { public static void main(String[] args) throws IOException { Path source = Paths.get("files/loremipsum.txt"); Path target = Paths.get("files/target.txt");

当我运行代码时,一切正常,但内容没有写入target.txt

public class SrtExtractor {
        public static void main(String[] args) throws IOException {
            Path source = Paths.get("files/loremipsum.txt");
            Path target = Paths.get("files/target.txt");
            Charset charSet = Charset.forName("US-ASCII");
            BufferedReader reader = Files.newBufferedReader(source, charSet);
            BufferedWriter writer = Files.newBufferedWriter(target, charSet);
            String temp;
            ArrayList<String> list = new ArrayList<>();
            while((temp = reader.readLine())!=null){
                list.add(temp);
                System.out.println(temp);
            }
            for(int i = 0; i<list.size(); i++)
            {
                writer.append(list.get(i));//why this line is not working???
            }
        }
    }
公共类SrtExtractor{
公共静态void main(字符串[]args)引发IOException{
Path source=Path.get(“files/loremipsum.txt”);
Path target=Path.get(“files/target.txt”);
Charset Charset=Charset.forName(“US-ASCII”);
BufferedReader reader=Files.newBufferedReader(源,字符集);
BufferedWriter=Files.newBufferedWriter(目标,字符集);
字符串温度;
ArrayList=新建ArrayList();
而((temp=reader.readLine())!=null){
列表。添加(临时);
系统输出打印项次(温度);
}

对于(inti=0;i
for(inti=0;i
for(inti=0;i),正如大家所说,您应该添加
writer.close()

另一方面,我认为在文本文件上书写的最好方式是这样(它总是为我运行):


正如大家所说,您应该添加
writer.close()

另一方面,我认为在文本文件上书写的最好方式是这样(它总是为我运行):


您正在使用
BufferedWriter
类-在本例中,写入的内容仍在缓冲区中。
writer.flush();
需要调用以清除缓冲区的内容并将其写入基础流

调用
close()
时,也会自动调用
flush()
close()
应在程序使用其资源时调用,以避免内存泄漏。正确关闭资源可能很困难,但Java 7添加了一个新的选项,以帮助程序员正确关闭其资源

下面是使用try with resources构造重写的示例。这将确保两个流都正确关闭,即使在处理文件时发生异常。这与在读写器上调用
close()
基本相同,但更安全,使用的代码更少

public class SRTExtractor {
    public static void main(String[] args) throws IOException {
        Path source = Paths.get("files/loremipsum.txt");
        Path target = Paths.get("files/target.txt");
        Charset charSet = Charset.forName("US-ASCII");
        try (
            BufferedReader reader = Files.newBufferedReader(source, charSet);
            BufferedWriter writer = Files.newBufferedWriter(target, charSet);
        ) {
            String temp;
            ArrayList<String> list = new ArrayList<>();
            while ((temp = reader.readLine()) != null) {
                list.add(temp);
                System.out.println(temp);
            }
            for (int i = 0; i < list.size(); i++) {
                writer.append(list.get(i));
            }
        }
    }
}
公共类SRTExtractor{
公共静态void main(字符串[]args)引发IOException{
Path source=Path.get(“files/loremipsum.txt”);
Path target=Path.get(“files/target.txt”);
Charset Charset=Charset.forName(“US-ASCII”);
试一试(
BufferedReader reader=Files.newBufferedReader(源,字符集);
BufferedWriter=Files.newBufferedWriter(目标,字符集);
) {
字符串温度;
ArrayList=新建ArrayList();
而((temp=reader.readLine())!=null){
列表。添加(临时);
系统输出打印项次(温度);
}
对于(int i=0;i
您正在使用
BufferedWriter
类-在这种情况下,写入的内容仍在缓冲区中。
writer.flush();
需要调用以清除缓冲区的内容并将其写入基础流

调用
close()
时,也会自动调用
flush()
close()
应在程序使用其资源时调用,以避免内存泄漏。正确关闭资源可能很困难,但Java 7添加了一个新的选项,以帮助程序员正确关闭其资源

下面是使用try with resources构造重写的示例。这将确保两个流都正确关闭,即使在处理文件时发生异常。这与在读写器上调用
close()
基本相同,但更安全,使用的代码更少

public class SRTExtractor {
    public static void main(String[] args) throws IOException {
        Path source = Paths.get("files/loremipsum.txt");
        Path target = Paths.get("files/target.txt");
        Charset charSet = Charset.forName("US-ASCII");
        try (
            BufferedReader reader = Files.newBufferedReader(source, charSet);
            BufferedWriter writer = Files.newBufferedWriter(target, charSet);
        ) {
            String temp;
            ArrayList<String> list = new ArrayList<>();
            while ((temp = reader.readLine()) != null) {
                list.add(temp);
                System.out.println(temp);
            }
            for (int i = 0; i < list.size(); i++) {
                writer.append(list.get(i));
            }
        }
    }
}
公共类SRTExtractor{
公共静态void main(字符串[]args)引发IOException{
Path source=Path.get(“files/loremipsum.txt”);
Path target=Path.get(“files/target.txt”);
Charset Charset=Charset.forName(“US-ASCII”);
试一试(
BufferedReader reader=Files.newBufferedReader(源,字符集);
BufferedWriter=Files.newBufferedWriter(目标,字符集);
) {
字符串温度;
ArrayList=新建ArrayList();
而((temp=reader.readLine())!=null){
列表。添加(临时);
系统输出打印项次(温度);
}
对于(int i=0;i
尝试您离开的writer.flush()和writer.close()
。是否费心在调试器中单步执行代码?完成后必须同时关闭读卡器和写卡器;使用上的示例自动/安全地使用新的try with resource功能执行此操作。添加writer.close()工作正常。非常感谢。请尝试writer.flush()和writer.close(),这是您离开时留下的
writer.close()
。是否费心在调试器中单步执行代码?完成后,您必须同时关闭读卡器和写卡器;请使用上的示例,使用新的“资源尝试”功能自动/安全地执行此操作。添加writer.close()成功了。非常感谢。+1以前没有见过自动关闭资源的新尝试,很好!+1以前没有见过自动关闭资源的新尝试,很好!
public class SRTExtractor {
    public static void main(String[] args) throws IOException {
        Path source = Paths.get("files/loremipsum.txt");
        Path target = Paths.get("files/target.txt");
        Charset charSet = Charset.forName("US-ASCII");
        try (
            BufferedReader reader = Files.newBufferedReader(source, charSet);
            BufferedWriter writer = Files.newBufferedWriter(target, charSet);
        ) {
            String temp;
            ArrayList<String> list = new ArrayList<>();
            while ((temp = reader.readLine()) != null) {
                list.add(temp);
                System.out.println(temp);
            }
            for (int i = 0; i < list.size(); i++) {
                writer.append(list.get(i));
            }
        }
    }
}