首页 文章

使用Java写入文件:输出在NotePad与Word /写字板/记事本中的显示方式不同

提问于
浏览
0

下面是用于读取名为Sales.txt的现有文本文件并将条形图输出到名为storeReport.txt的文本文件的Java代码
每个星号代表100美元的销售额 .

import java.io. *;

import java.util . *;

公共课BarChart

{public static void main(String [] args)抛出FileNotFoundException,IOException

{
       int[] s = new int[5];
       int[] b = new int[5];

       FileWriter fstream = new FileWriter("storeReport.txt");
       BufferedWriter out = new BufferedWriter(fstream);
       Scanner scanner = new Scanner(new File("Sales.txt"));

   int i = 0;

       while(scanner.hasNext())
       s[i++] = scanner.nextInt();
         System.out.println("SALES BAR CHART\n");
         out.write("SALES BAR CHART\n");

   for (i=0; i<s.length; i++)
       {
        b[i] = s[i]/100;
        out.write("store "+ (i+1) +" : ");
        System.out.print("store "+ (i+1) +" : ");

        for(int j = 1; j <= b[i]; j++) {
          System.out.print("*");
          out.write("*"); }
          out.write("\n");
          System.out.println();
       }

        out.close();  //Close the output stream

}
}

当我在Word,或写字板或NotePad中打开storeReport.txt时,输出显示为预期:

商店1: ******* 商店2: **** *********
商店3: ************
商店4: ******
商店5: *************

当我在NotePad中打开文件时,输出全部显示在一行上 . (我正在使用Windows 7和最新的jGrasp来编译和运行程序 . )SALES BAR CHART

输入文件Sales.txt如下所示:

1000
1200
1800
800
1900

任何人都知道为什么NotePad会将输出显示为:

SALES BAR CHARTstore 1: ******* store 2: **** ******** store 3: **** ************ store 4: **** ****** store 5: **** **************

4 回答

  • 1

    记事本不会将简单的换行符 '\n' 字符解释为换行符 . 它使用"Windows"格式的Carriage Return Newline "\r\n" 来指定换行符 .

    您基本上需要执行以下操作之一:

    • 停止使用记事本

    • 使用某些程序将行尾字符转换为CR LF(unix2dos

    • 将程序更改为输出 \r\n

    我想大多数人会同意#1是你最好的选择,但我真的不太了解 \r\n 问题在Windows平台上的扩展程度 .

    编辑:正如srgerg在他的回答中指出的,你最好的选择是停止自己指定 \n 并使用JAVA的out.newLine()函数来生成行结束 . 这些对于您使用的任何平台都是正确的 .

    有关更多信息,请参阅维基百科:http://en.wikipedia.org/wiki/Newline#Common_problems

  • 0

    我同意上面提供的其他答案 . 只是一个小设计指针,可能会增强整体思维 .

    我理解的是你正在创建一些数据,然后尝试从中生成一些图形....

    • 如何使用显式字段分隔符和记录分隔符 .

    • 使用一些编码 . 如果在不同的环境中运行,这将为您提供更好的控制 .

  • 0

    我怀疑这是一个newline问题 . 尝试更换你的

    out.write("\n");
    

    out.newLine();
    
  • 2

    记事本只能理解DOS / Windows行结尾,即\ r \ n,而记事本和Wordpad也可以处理Linux / Unix /新MacOS(\ n)和较旧的MacOS(\ r)行结尾 .

    您可以尝试为您的系统获得正确的行结束:

    System.getProperty ("line.separator");
    

    或者尝试将 println ()printf/format"%n" 结合使用,程序将在运行平台上执行适当的操作 .

    但是,安装比记事本更精细的编辑器并不是一个坏主意 .

相关问题