2011-08-01 99 views
0

我有以下代碼來打開和讀取文件。我無法弄清楚如何讓它通過並打印文件中每個字符的總數,打印第一個和最後一個字符,並在文件中間正確地打印字符。什麼是最有效的方式來做到這一點?用Java讀取文件

這是主類:

import java.io.IOException; 

public class fileData { 

public static void main(String[ ] args) throws IOException { 
    String file_name = "/Users/JDB/NetBeansProjects/Program/src/1200.dna"; 

    try { 
     ReadFile file = new ReadFile(file_name); 
     String[] arrayLines = file.OpenFile(); 

     int i; 
     for (i=0; i<arrayLines.length; i++) 
     { 
      System.out.println(arrayLines[i]); 
     } 
    } 

    catch (IOException e) { 
     System.out.println(e.getMessage()) ; 
    } 

} 


} 

和其他類:

import java.io.IOException; 
import java.io.FileReader; 
import java.io.BufferedReader; 


public class ReadFile { 

    private String path; 

public ReadFile (String file_path) 
    { 
    path = file_path; 
    } 

public String[] OpenFile() throws IOException 
    { 
     FileReader fr = new FileReader(path); 
     BufferedReader textReader = new BufferedReader(fr); 

     int numberOfLines = readLines(); 
     String[] textData = new String[numberOfLines]; 

     int i; 

     for(i=0; i<numberOfLines; i++) 
     { 
      textData[i] = textReader.readLine(); 
     } 

     textReader.close(); 
     return textData; 
    } 

    int readLines() throws IOException 
    { 
     FileReader file_to_read = new FileReader(path); 
     BufferedReader bf = new BufferedReader(file_to_read); 

     String aLine; 
     int numberOfLines = 0; 

     while ((aLine = bf.readLine()) != null) 
     { 
      numberOfLines++; 
     } 

     bf.close(); 
     return numberOfLines; 
    } 
+0

你在看什麼樣的效率?速度還是內存佔用? – gigadot

回答

1

一些提示其可能的幫助。

  1. A Map可用於存儲有關字母表中每個字符的信息。
  2. 可以從文件的大小中找到文件的中間部分。
+0

另外考慮...我們是否想將新行字符視爲「文件中的字符」。 IE:我們是否將它們包含在計數中,並且在查找文件的「中間」字符時我們會考慮它們嗎? –

1

理解我能想到的最簡單的方法是以字符串形式讀取整個文件。然後使用String類中的方法獲取第一個,最後一個和中間字符(索引爲str.length()/ 2)處的字符。

由於您已經在文件中一次讀取了一行文本,因此可以使用StringBuilder從這些行中構造一個字符串。使用結果字符串,charAt()和substring()方法,你應該能夠得到你想要的一切。

1

的這幾行代碼會(使用Apache's FileUtils庫)做到這一點:

import org.apache.commons.io.FileUtils; 

public static void main(String[] args) throws IOException { 
    String str = FileUtils.readFileToString(new File("myfile.txt")); 
    System.out.println("First: " + str.charAt(0)); 
    System.out.println("Last: " + str.charAt(str.length() - 1)); 
    System.out.println("Middle: " + str.charAt(str.length()/2)); 
} 

任何人誰說:「你不能用家庭作業庫」的不公平 - 在現實世界中,我們始終使用優先於reinventing the wheel

+1

的確,我們確實在現實世界中使用它們 - 但是您不認爲這會使作業毫無意義,因此顯然不是預期的答案?不要誤解我的意思,我* * *在學校時可能會試試你的方式...... –

+0

我會給老師那個答案。 *和*不使用第三方庫的答案。 >; - > –