java - 使用 Java 将文本从一个文件反转并存储到另一个文件时减小大小

标签 java

我做了这个家庭作业练习,从一个文本文件中读取文本并将其反转存储到另一个新文件中。这是代码:

import java.util.*;
import java.io.*;

  public class FileEcho {

File file;
Scanner scanner;
String filename = "words.txt";
File file1 ;
            PrintWriter pw ;
void echo() {
    try {
        String line;

        file = new File( filename);
        scanner = new Scanner( file );
        file1 = new File("brabuhr.txt");
        pw = new PrintWriter(file1);


        while (scanner.hasNextLine()) {
            line = scanner.nextLine();
            String s = new StringBuilder(line).reverse().toString();

            pw.println(s);
        }
        scanner.close();
    } catch(FileNotFoundException e) {
        System.out.println( "Could not find or open file <"+filename+">\n"+e 
 );
    } 
}

public static void main(String[] args) {
    new FileEcho().echo();
}
 }

这是一张图片 Picture here

问题是:为什么新生成的文件大小相同,但字符却相反,却变小了?

如果有人能解释一下那就太好了,因为甚至我的教授也不知道为什么会这样。

附注;文件的上下文只是字典中的一些单词。 在其他学生的计算机上也是如此,所以问题不是来 self 的计算机

最佳答案

问题是您从未关闭输出流pw,因此任何挂起的输出都不会写入底层文件。这可能会导致您的文件被截断。

您应该在finally 中或在尝试使用资源时使用pw.close() 关闭输出流。

try (pw = new PrintWriter(file1)) {
   while (scanner.hasNextLine()) {
      line = scanner.nextLine();
      String s = new StringBuilder(line).reverse().toString();
      pw.println(s);
  }
}

您的实现可以简化为以下内容:

import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FileEcho {
    void echo() throws IOException {
        try (PrintWriter pw = new PrintWriter("brabuhr.txt")) {
            Files.lines(Paths.get("words.txt"))
                .map(s -> new StringBuilder(s).reverse().toString())
                .forEach(pw::println);
        }
    }

    public static void main(String[] args) throws IOException {
        new FileEcho().echo();
    }
}

在此示例中,我使用“try-with-resources”来自动关闭 PrintWriter pw

关于java - 使用 Java 将文本从一个文件反转并存储到另一个文件时减小大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792925/

相关文章:

Java泛型问题

java - 带标题的 Android 多行 ListView

java - eBay GetMyeBaySellings 在 XML 请求中找不到 XML <RequestPassword> 或 <RequestToken>

java - java中通过socket连接测量网络使用情况

java - 无法使用 Java 11 在 IntelliJ 中启动 JavaFX 应用程序

java - 调用名称为字符串的类

eclipse - Eclipse JDK 警告的 Maven 集成

java - Spring 3 应用程序中的业务逻辑和异常

java - Hibernate 将时间戳中的时间映射为时间 00 :00:00

java - 来自 Web 应用程序的异步调用