私は学校向けのプログラムを書こうとしています。割り当ては、ループしてユーザーにファイルの入力を求めることです。ファイルが見つからないか、ユーザーがループを終了すると(私の場合、joptionpaneで[キャンセル]をクリックします)、各ファイルのデータが出力されます。これまでのところ、これは私のコードです:
/**
* @param args
*/
public static void main(String[] args) {
// Lists to hold file data
List<String> fileNames = new ArrayList<String>();
List<Integer> numChars = new ArrayList<Integer>();
List<Integer> numWords = new ArrayList<Integer>();
List<Integer> numLines = new ArrayList<Integer>();
String inFile;
while ( (inFile = JOptionPane.showInputDialog("Enter a file name:")) != null) {
// Create new file object instance
File file = new File(inFile);
try {
fileNames.add(inFile); // File name as a string
// Pass file objects
numChars.add( getNumChars(file));
numWords.add( getNumWords(file));
numLines.add( getNumLines(file));
System.out.println("entered try block");
} catch(FileNotFoundException e) {
System.out.println("Could not find file: " + inFile);
// break out the loop and display data
break;
}
} // end while
if (numChars.size() > 0)
showFileData(fileNames, numChars, numWords, numLines);
System.out.println("Program ended");
}
private static void showFileData(List<String> fileNames,
List<Integer> numChars, List<Integer> numWords,
List<Integer> numLines) {
for (int i=0;i<numChars.size();i++) {
System.out.println("Data for: " + fileNames.get(i));
System.out.println("Number of characters: " + numChars.get(i));
System.out.println("Number of words: " + numWords.get(i));
System.out.println("Number of lines: " + numLines.get(i));
System.out.println("-----------------------------------------------");
}
}
private static int getNumLines(File file) throws FileNotFoundException {
int c = 0;
Scanner f = new Scanner(file);
while(f.hasNextLine()) {
c++;
}
return c;
}
private static int getNumWords(File file) throws FileNotFoundException {
int c = 0;
Scanner f = new Scanner(file);
while (f.hasNextLine()) {
String[] w = f.nextLine().split(" ");
c += w.length;
}
return c;
}
private static int getNumChars(File file) throws FileNotFoundException {
Scanner f = new Scanner(file);
int c = 0;
String line;
while(f.hasNextLine()) {
line = f.nextLine();
String[] s = line.split(" ");
for (int i=0;i<s.length;i++) {
c += s[i].length();
}
}
return c;
}
プログラムを実行するときにキャンセルを押すと、ループが終了し、想定どおりに最後に表示されます。存在しないファイルを入力すると、想定どおりに機能します。それが機能しないのは、存在するファイルを入力したときだけで、別の入力ダイアログがポップアップしません。実際、tryブロックに入っていないようです。プログラムを正しく設定しましたか?