如何在读取文件时保持格式化

问题描述:

我试图将.java文件读入JTextArea,无论使用何种方法读取文件,格式都不会保留。实际的代码是确定的,但评论总是搞砸了。这是我的尝试。如何在读取文件时保持格式化

//Scanner: 
    //reads an input file and displays it in the text area 
     public void readFileData(File file) 
     { 
     Scanner fileScanner = null; 

     try 
     { 
      fileScanner = new Scanner(file); 
       while(fileScanner.hasNextLine()) 
       { 
        String line = fileScanner.nextLine(); 

        //output is a JTextArea 
        output.append(line + newline); 
       } 

     } 
      catch(FileNotFoundException fnfe) 
      { 
       System.err.println(fnfe.getMessage()); 
      } 
     } 


//Scanner reading the full text at once: 
    //reads an input file and displays it in the text area 
     public void readFileData(File file) 
     { 
     Scanner fileScanner = null; 

     try 
     { 
      fileScanner = new Scanner(file); 

      fileScanner.useDelimiter("\\Z"); 
      String fullText = fileScanner.next(); 

      //print to text area 
      output.append(fullText + newline); 

     } 
      catch(FileNotFoundException fnfe) 
      { 
       System.err.println(fnfe.getMessage()); 
      } 
     } 


//BufferedReader: 
    //reads an input file and displays it in the text area 
     public void readFileData(File file) 
     { 
     //Scanner fileScanner = null; 

     try 
     { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(file)); 

      String line = ""; 
      while((line = reader.readLine()) != null) 
      { 
       output.append(line + newline); 
      }    
     } 

是否有反正保持格式相同?

PS - 张贴于http://www.coderanch.com/t/539685/java/java/keep-formatting-while-reading-files#2448353

猎人

使用JTextArea.read(...)方法。

+0

JTextArea.read工作,我会用camickr溶液(...)做几乎完全一样的任何我有过上述的尝试。我最终发现的是JTextArea具有setTabSize()和getTabSize()方法,并通过将setTabSize()更改为更小的数字,我在原始文档中使用的选项卡正常显示。 – 2011-05-31 16:55:51

这可能是由于var新行被硬编码为'\ n'或类似的东西。尝试定义换行符如下:

String newline=System.getProperty("line.separator"); 

该解决方案更是“一般”,但如果有一个JTextArea

+0

-1,JTextArea的文档使用“\ n”来表示换行符。在Windows系统上使用line.separator属性将尝试在文本区域附加“\ r \ n”。 “\ r”将被解析出来。 – camickr 2011-05-27 23:45:53