숙제는 각 파일에 대해 새 스레드를 시작하여 하나 이상의 파일 (파일 이름이 명령 줄에서 인수로 지정됨)의 단어를 계산하는 프로그램을 구현하도록 요청합니다.파일 읽기/쓰기 스레드를 사용하는 방법은 무엇입니까?
여기에 내 문제가 있습니다. Runnable 인터페이스의 run() 메서드가 throw하지 않기 때문에 run() 메서드가 IOException을 throw 할 수 없습니다. 필자는 Runnable을 구현하는 클래스의 생성자에 File 및 Scanner 생성자 호출을 넣음으로써 컴파일러의 경고를 알았습니다.하지만 컴파일이 잘되었지만 여전히 정결하지는 않은 것처럼 느껴집니다. 이견있는 사람?
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.IOException;
public class WordCounter implements Runnable {
File inFile;
Scanner in;
int characters;
int words;
int lines;
int[] counted;
public WordCounter(String aFile) throws FileNotFoundException {
inFile = new File(aFile);
in = new Scanner(inFile);
counted = new int[3];
}
public int[] getTotals() {
return counted;
}
public void run() {
characters = 0;
words = 0;
lines = 0;
while (in.hasNextLine()) {
String thisLine = in.nextLine();
lines++;
Scanner line = new Scanner(thisLine);
while (line.hasNext()) {
String thisWord = line.next();
words++;
characters++; // because each call to line.next() strips a whitespace character
Scanner word = new Scanner(thisWord);
word.useDelimiter("");
while (word.hasNext()) {
char ch = word.next().charAt(0);
characters++;
}
}
}
counted[0] = characters;
counted[1] = words;
counted[2] = lines;
}
}
그 일에 대해 생각해 보았습니다. 그러나이 장의 장에서는 학생들이 수업에서 예외를 잡아 내지 않는 것이 좋습니다. 수업에서 예외를 처리하지 않아서 (또는 다른 프로그래머가 처리 할 수있는 것처럼) 효과적으로 처리 할 수 없을 수도 있습니다. 클래스를 사용하는 기본 메소드에서 (그 말이 의미가 있었으면 좋겠다 ...) 나는 그 판단을 언제 내릴 것인지 아직 조금 확신하지 못한다고 생각한다. –
하루가 끝나면 그것은 심판의 명령입니다. 이것은 모두 제 의견입니다. 실행 파일이 Scanner/File에 의해 던져진 예외를 처리 할 수 없다면, 왜 당신의 실행 파일이 이러한 유형을 인스턴스화할까요? 왜 당신의 Runnable에 유효한 Scanner를 전달하지 않겠습니까? 이것은 main()에서 try/catch를 유지할 것이다. 예외로 끝내는 것은 중요합니다. 당신이 그것에서 회복 할 수 있다면, 그것을 던져라. 당신이 조용히 로그하고 실패한다면, 나는 Runnable 내에서 그것을 잡으라고 말합니다. – Brad