BufferedReader 对其他函数不可见
BufferedReader not visible to other functions
我有一个 train.csv 文件,其中包含 "id"、"title"、"body" 和 "tag" 形式的 Whosebug 问题。我想从头提取问题并将它们以适当的格式存储在另一个文本文件中。所以我在写这个程序。在程序中我写了一个 StringBetweenQuotes()
函数。我为我的 train.csv 文件使用了一个名为 training_data
的 BufferedReader
。我的问题很简单,我为整个 class 声明一个受保护的 training_data
的方式,我认为一旦 StringBetweenQuotes
使用它时它就会可见。但是我收到 Java IO 异常。如何处理?
import java.io.*;
public class ExtractData {
protected static BufferedReader training_data;
public static void main(String[] args) throws IOException {
training_data = new BufferedReader(new FileReader("/home/trafalgar_law/Desktop/ML-CourseProject/Train/Train.csv"));
BufferedWriter output = new BufferedWriter(new FileWriter("/home/trafalgar_law/Desktop/ML-CourseProject/Train/FormattedOutput.txt" ));
int count = 0;
int r, Id;
char ch;
String line = training_data.readLine();
StringBuffer id = new StringBuffer("");
StringBuffer title = new StringBuffer("");
StringBuffer body = new StringBuffer("");
StringBuffer tags = new StringBuffer("");
while(true) {
id = StringBetweenQuotes();
output.write("Id:\n" + id);
r = training_data.read();
title = StringBetweenQuotes();
output.write("Title:\n" + title);
r = training_data.read();
body = StringBetweenQuotes();
output.write("Body:\n" + body);
r = training_data.read();
tags = StringBetweenQuotes();
output.write("Tags:\n" + tags);
r = training_data.read();
Id = Integer.parseInt(id.toString());
if (Id > 3) break;
//++count;
}
training_data.close();
output.close();
}
public static StringBuffer StringBetweenQuotes() {
StringBuffer buffer= new StringBuffer("");
/*
Method to extract text between quotes
training_data will be used here
*/
return buffer;
}
}
请
- 不要用StringBuffer,这些十年前就被StringBuilder取代了
- 不要用空字符串初始化 StringBuilder。这只会损害性能。
- 不要为您丢弃的 StringBuilder 创建虚拟值。
- 不要通过静态字段传递变量。我建议你把它作为参数传递。
另外不要忽略 IOExceptions,你应该捕获它们,或者在这种情况下,我建议你重新抛出它。
我会这样写,使用现有的 StringBuilder
public static void stringBetweenQuotes(BufferedReader br, StringBuilder sb)
throws IOException {
sb.setLength(0);
我有一个 train.csv 文件,其中包含 "id"、"title"、"body" 和 "tag" 形式的 Whosebug 问题。我想从头提取问题并将它们以适当的格式存储在另一个文本文件中。所以我在写这个程序。在程序中我写了一个 StringBetweenQuotes()
函数。我为我的 train.csv 文件使用了一个名为 training_data
的 BufferedReader
。我的问题很简单,我为整个 class 声明一个受保护的 training_data
的方式,我认为一旦 StringBetweenQuotes
使用它时它就会可见。但是我收到 Java IO 异常。如何处理?
import java.io.*;
public class ExtractData {
protected static BufferedReader training_data;
public static void main(String[] args) throws IOException {
training_data = new BufferedReader(new FileReader("/home/trafalgar_law/Desktop/ML-CourseProject/Train/Train.csv"));
BufferedWriter output = new BufferedWriter(new FileWriter("/home/trafalgar_law/Desktop/ML-CourseProject/Train/FormattedOutput.txt" ));
int count = 0;
int r, Id;
char ch;
String line = training_data.readLine();
StringBuffer id = new StringBuffer("");
StringBuffer title = new StringBuffer("");
StringBuffer body = new StringBuffer("");
StringBuffer tags = new StringBuffer("");
while(true) {
id = StringBetweenQuotes();
output.write("Id:\n" + id);
r = training_data.read();
title = StringBetweenQuotes();
output.write("Title:\n" + title);
r = training_data.read();
body = StringBetweenQuotes();
output.write("Body:\n" + body);
r = training_data.read();
tags = StringBetweenQuotes();
output.write("Tags:\n" + tags);
r = training_data.read();
Id = Integer.parseInt(id.toString());
if (Id > 3) break;
//++count;
}
training_data.close();
output.close();
}
public static StringBuffer StringBetweenQuotes() {
StringBuffer buffer= new StringBuffer("");
/*
Method to extract text between quotes
training_data will be used here
*/
return buffer;
}
}
请
- 不要用StringBuffer,这些十年前就被StringBuilder取代了
- 不要用空字符串初始化 StringBuilder。这只会损害性能。
- 不要为您丢弃的 StringBuilder 创建虚拟值。
- 不要通过静态字段传递变量。我建议你把它作为参数传递。
另外不要忽略 IOExceptions,你应该捕获它们,或者在这种情况下,我建议你重新抛出它。
我会这样写,使用现有的 StringBuilder
public static void stringBetweenQuotes(BufferedReader br, StringBuilder sb)
throws IOException {
sb.setLength(0);