2016-11-22 22 views
0

ランダムなコードを持つファイルがあります(他のランダムファイルも使用できます)。各行の先頭に行番号を追加します。たとえば :ファイル内の各行の先頭に数字を追加する

1. 
2. 
3. 

など また、任意の空白行を削除し、正しくラインの番号続けます。

public static void main(String[] args) throws FileNotFoundException 
{ 
    boolean foundException = false; 
    Scanner keyboard = new Scanner(System.in); 
    do { 
     try { 
      System.out.print("Please enter input file name: "); 
      String fileName = keyboard.next(); 
      File inputFile = new File("inputfile.txt"); 
      Scanner scanner = new Scanner(new File("inputfile.txt")); 
      PrintStream out = new PrintStream(new File("inputfile.txt")); 

      while(scanner.hasNextLine()){ 
       String line = scanner.nextLine(); 
       line = line.trim(); 
       if(line.length() > 0) 
        out.println(line); 
      } 

      for(int i = 1; i < inputFile.length(); i++){ 
       System.out.println(i + "." + inputFile); 
      } 
      foundException = false; 
     } 
     catch (FileNotFoundException x) { 
      System.out.println("File does not exist"); 
      foundException = true; 
     } 

    } while (foundException); 
} 
} 

が、私が得る結果は、ファイル全体が約25行を持っていますが、私は取得しています 「300 inputfile.txt」のような行+ファイル名の非常に大きな数である: はここに、これまでに私のコードです500 +ライン、私はスペースの後にすべての単語を数えていると仮定していますか? ファイルに関する別の質問がありますが、 "inputfile.txt"というコードでファイルを正しく呼び出すのがプロジェクトのフォルダ内にあるかどうかはわかりません。 お時間をいただきありがとうございます。

+0

'File.length()'は "この抽象パス名で示されるファイルの長さ** **バイト**を返します"(私の強調)。あなたが非常に高い数字を持っていることは間違いありません –

答えて

0

入力ストリームの初期化は、あなたが最初のファイルの内容を読むことができるので、ファイルの内容を削除し、次のように書き込みます:

public static void main(String[] args) throws FileNotFoundException { 
     boolean foundException = false; 
     Scanner keyboard = new Scanner(System.in); 
     do { 
      try { 
       System.out.print("Please enter input file name: "); 
       String fileName = keyboard.next(); 
       File inputFile = new File("inputfile.txt"); 
       Scanner scanner = new Scanner(new File("inputfile.txt")); 
       ArrayList<String> lines = new ArrayList<>(); 

       int lineNum = 1; 
       while (scanner.hasNextLine()) { 
        String line = scanner.nextLine(); 
        line = line.trim(); 
        if (line.length() > 0) { 
         lines.add(lineNum + "." + line); 
         lineNum++; 
        } 
       } 
       PrintStream out = new PrintStream(new File("inputfile.txt")); 
       for (String line : lines) 
        out.println(line); 

      } catch (FileNotFoundException x) { 
       System.out.println("File does not exist"); 
       foundException = true; 
      } 

     } while (foundException); 
    } 

とファイルオブジェクトに対して呼び出されるメソッド名は、内の行数を返しません。ファイル。

長さ、バイト単位で、ファイルが存在しない場合は、この抽象パス名、 または0Lが示すファイルの:私は、ドキュメントを参照します。一部のオペレーティングシステム は、デバイスやパイプなどのシステム依存の エンティティを示すパス名に対して、0Lを返すことがあります。

+0

私はそれを実行し、何もしないファイル名を入れてプログラムを終了する(存在するファイルを置いたと仮定して)コードをテストしました。ファイルが存在しないか、それを印刷するものは何もありませんか?私はそれが私が持っているが、それを行うことができないように見えるファイルを読みたい、私はPrintStreamのために別のファイルを作成するか、そのオブジェクトは正確に何をしますか? – Sholyhit

+0

プログラムが終了したら、行番号が追加されたかどうかを確認してください。ファイルの内容をコンソールに出力したい場合は、書き込み中または読み込み中にループでやり直すか、単純にarraylistを繰り返します。 – xBATx

1
同じファイルに書き込むために役立ちます

あなたは、メモリ内のすべての行を保つことができた場合、:

Path inputFile = Paths.get("inputfile.txt"); 
    Charset charset = Charset.getDefault(); 
    List<String> lines = Files.readAllLines(inputFile, charset); 
    try (PrintWriter out = new PrintWriter(
      Files.newBufferedWriter(inputFile, charset, 
       StandardOpenOptions.TRUNCATE_EXISTING))) { 
     int lineno = 0; 
     for (String line : lines) { 
      ++lineno; 
      out.printf("%d. %s%n", lineno, line); 
     } 
    } 

あなたはCharset.UTF_8のような固定の文字セットを使用することができ、固定改行の代わり%n\r\n(Windows)のようになります。

関連する問題