2011-08-01 7 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. Mapは、アルファベットの各文字に関する情報を格納するために使用できます。
  2. ファイルの中央はファイルのサイズから見つけることができます。
+0

また、検討してください...改行文字を「ファイル内の文字」と見なしたいですか? IE:ファイルに「中」の文字が含まれているかどうかを調べるときに考慮しますか? –

1

私が考えることができる最も簡単な方法は、ファイル全体を文字列として読み込むことです。次に、Stringクラスのメソッドを使用して、最初、最後、および中間の文字(インデックスstr.length()/ 2の文字)を取得します。

一度に1行ずつファイルを読み込んでいるので、StringBuilderを使用してこれらの行から文字列を構築できます。結果のString、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

私は教師にその答えを与えるでしょう。 * AND *サードパーティライブラリを使用しない回答。 >; - > –

関連する問題