【问题标题】:Printing the exact content of a text file in Java在 Java 中打印文本文件的确切内容
【发布时间】:2010-03-25 10:59:45
【问题描述】:

我想在 Java 中打印一个简单文本文件的内容,完全按照文本在文本文件中的显示方式。

打印出来的内容与文本文件相同,但格式不同。打印输出中忽略制表符和换行符。任何帮助将不胜感激。

【问题讨论】:

  • 向我们展示您如何阅读它以及如何打印它。否则我们只是猜测。
  • 除非你发布一些代码,否则我们无法猜测你做了什么。

标签: java text io


【解决方案1】:

正如@Joachim Sauer 和@bmargulies 所指出的那样,如果没有更多细节,我们无法真正告诉您到底是什么问题。

但是为了给你一些东西来对比你的代码,下面将读取一个作为参数提供的文件,然后逐个字符地读取它(即它支持 unicode 字符),同时打印该字符。如果这不能实现您的目标,那么一个对您来说失败的特定(小)输入示例会很好。

import java.io.*;
class printout {
   public static void main (String[] args) {
      if (args.length < 1) {
         System.err.println ("Usage: printout <filename>");
         System.exit (1);
      }

      File sourceFile = new File (args[0]);
      FileReader fr = null;
      try {
         fr = new FileReader (sourceFile);
         int inChar;

         while ( (inChar = fr.read()) != -1 ) {
            System.out.printf ("%c", inChar);
         }
      } catch (IOException e) {
         System.err.printf ("Failure while reading %s: %s\n",
                            args[0], e.getMessage());
         e.printStackTrace ();
      } finally {
         try {
            if (fr != null) { fr.close (); }
         } catch (IOException e) {
            System.err.printf ("Error closing file reader: %s\n",
                               e.getMessage());
            e.printStackTrace ();
         }
      }
   }
}

【讨论】:

  • 1.) 不要使用 HTML 标记来格式化代码 2.) 不是逐字节读取,而是逐字符读取。
  • @Joachim Sauer:感谢您指出我关于逐字符读取而不是逐字节读取的错误;我已相应地更正了答案文本。
【解决方案2】:

打印是指this?然后尝试用例如替换所有 \t 4 个空格和 \n 带有新的 drawString 调用。

另一种可能是填写JTextComponent 或JEditorPane 并打印出来。

如果您的意思是正常的系统输出打印,请查看 RTBarnard + 使用的答案:

BufferedReader reader = new BufferedReader(
    new InputStreamReader(new FileReader("file.txt"), "UTF-8");
reader.readLine(); etc

在我看来这更容易,您将始终使用正确的编码

【讨论】:

    【解决方案3】:

    FileUtils.readFileToString(file) 应该这样做(来自commons-io),但要小心较大的文件,因为它们可能会占用分配给 VM 的全部内存。

    你可以使用的另一个东西是IOUtils.copy(new FileInputStream(..), outputStream); - 这会将所有内容从一个流(在本例中为文件流)传输到另一个输出流。

    【讨论】:

    • 您不会使用 readFileToString 获得确切的内容(问题要求的内容)。如果输入文件末尾不包含换行符,它将添加一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2021-08-02
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2018-05-03
    • 2021-09-12
    相关资源
    最近更新 更多