1

次の非常に単純な Java プログラムを作成して、ユーザーにファイル名の入力を求めると、このファイルの行数が標準出力に報告されます。

import java.io.*;
import java.util.*;

public class CountLine {

 public static void main(String[] args) 
 {

     //  prompt the user to enter their file name
    System.out.print("Please enter your file name: ");

    //  open up standard input
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      String fileName = null;

      //  read the username from the command-line; need to use try/catch with the
      //  readLine() method
      try {
         fileName = br.readLine();
      } catch (IOException ioe) {
         System.out.println("IO error trying to read your name!");
         System.exit(1);
      }

      System.out.println("Thanks for the file name, " + fileName);



    File file = new File("C:/Users/Will/Desktop/"+fileName);
    Scanner scanner;
    try {
        scanner = new Scanner(file);

    int count =0;
    String currentLine;

    while(scanner.hasNextLine())
    {
        currentLine=scanner.nextLine();
        count++;

    }

    System.out.println("The number of lines in this file is "+count);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("There is no such file");
        e.printStackTrace();
    }
}

}

それは働いています.専門家が私を助けてくれれば本当に感謝しています.

  1. このコード フラグメントで改善できる点がないか確認してください。
  2. ファイルが見つからない場合、例外は最も外側の catch ステートメントでキャッチされ、スタック トレースが出力されます。しかし、あまりユーザーフレンドリーではないと思います.ファイルが存在しない場合、プロセス全体を最初からやり直す方法はありますか?

前もって感謝します。

4

3 に答える 3

1

コードで構造を取得します。

public static void main(String[] args) 
{
  string output;
  string fname = readFileName();
  if (fileValid(fname)) //Ensure FileExists
  {
     int lineCount = scaneFile(fname);   
     output = "some output text including line numbers"   
  }  
  else
  {
    output = "File Not Valid..."
  }
  //showOutput...
}
于 2012-08-31T12:43:08.713 に答える
1

明らかな変更は、countLines(String filename)現在 main() にあるほとんどのコードを含むメソッドを作成することです。明らかに、main() は countLines() を呼び出します。

ファイルのプロンプトは、main() または別のメソッドに存在する可能性があります。

エラー時に再起動するには、次のようなループが必要です。

filename = // read filename from stdin;
while(keepGoing(filename)) { // null check or whatever to let you out of the loop
    try {
         int numLines = countLines(filename);
         println("num lines in " + filename + "=" +numLines);
    }
    catch(Exception ex) { // or just specific excpetions
        ex.printStackTrace();
    }
}
于 2012-08-31T12:37:13.240 に答える
0

GUIを作りたくない限り。ファイルへのパスをコマンド ライン パラメータとして受け取ることをお勧めします。

ファイルが存在しない場合は、メッセージを出力して終了します。それで全部です。

コマンド ラインは、ユーザーに上キーで上に移動し、名前を編集して再度実行するオプションを提供します。

このクラスは LineCounter という名前で、「ビジネス ロジック」です。

package countlines;

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

public class LineCounter {

    private int lineCount = 0;
    public LineCounter(File file) throws IOException{
        BufferedReader inFile = new BufferedReader(new FileReader(file));
        while(inFile.readLine() != null) {
            lineCount++;
        }
        inFile.close();
    }

    public int getLineCount() {
        return lineCount;
    }   

}

このクラスは「プレゼンテーション ロジック」です。

package countlines;

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main (String[] args){
        if (args.length != 1){
            System.out.println("Usage: java countlines/Main filePath");
            System.exit(1);
        } 

        File f = new File(args[0]);

        if (!f.exists()){
            System.out.println("File "+f.getAbsolutePath()+" doesn't exist");
            System.exit(2);
        }

        if (f.isDirectory()){
            System.out.println(f.getAbsolutePath()+" is a directory");
            System.exit(2);         
        }

        LineCounter c;
        try {
            c = new LineCounter(f);
            System.out.println(c.getLineCount());
        } catch (IOException e) {
            System.out.println("Error reading file " + f.getAbsolutePath());
        }

    }
}
于 2012-08-31T13:13:13.650 に答える