readFileFixed メソッドで FileReader の周りに BufferedReader を実装/ラップするにはどうすればよいですか? 私も調べる必要があります:
- 変数の初期化。
- 例外処理
- リーダーを閉じる
- ファイルの読み取り方法。
どんなヒントでも大歓迎です。
package codeTest;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class CodeTestExerciseBadCode {
private static final String testFilename = "CodeTestExerciseBadCode.java";
public CodeTestExerciseBadCode() {}
public static void main(String[] args) throws IOException {
CodeTestExerciseBadCode part2 = new CodeTestExerciseBadCode();
System.out.println(part2.readFileFixed());
}
public String readFile() {
File f = null;
FileReader fr = null;
StringBuffer content = null;
try {
f = new File(testFilename);
fr = new FileReader(f);
int c;
while ((c = fr.read()) != -1) {
if (content == null) {
content = new StringBuffer();
}
content.append((char) c);
}
fr.close();
} catch (Exception e) {
// Error message along with the cause of the Error
throw new RuntimeException("An error occured reading your file", e);
}
return content.toString();
}
public String readFileFixed() throws IOException {
StringBuffer content = null;
File file = new File(testFilename);
// I added this as a test. If directory name is provided then no issues
if (file.isFile() && (file.length() > 0)) {
// Placed inside the if() block, to avoid creating it unnecessarily if not needed
content = new StringBuffer();
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
content.append(scanner.nextLine());
content.append(System.getProperty("line.separator"));
}
} catch (Exception e) {
// Throw an exception instead of printing the stack trace
throw new IOException("An error occured reading your file", e);
}
}
return((content == null)
? ""
: content.toString());
}
}