java - BufferedReader 对其他函数不可见

标签 java csv bufferedreader

我有一个 train.csv 文件,其中包含“id”、“title”、“body”和“tag”形式的 StackOverflow 问题。我想从一开始就提取问题并将它们以正确的格式存储在另一个文本文件中。所以我正在写这个程序。在程序中我编写了一个 StringBetweenQuotes() 函数。我为 train.csv 文件使用名为 training_dataBufferedReader。我的问题很简单,我为整个类声明了 protected 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);

关于java - BufferedReader 对其他函数不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049886/

相关文章:

java - 如何在Java中正确使用SSL?

python - 如何使用带有 gzip 压缩选项的 pandas read_csv 读取 tar.gz 文件?

java newbie : reading in a file for word search code. .add() 和 .toArray() 给我错误

java - 从 Android 应用程序发送 POST

ruby-on-rails - 如何在 rails 4 中验证 .csv 文件

Java 将 BufferedReader、DataOutputStream 和 Sockets 传递给可运行线程类会导致写入流时出现套接字异常

python - 如何将 python 中的 .place() 方法转换为 java?

java - 升级到 Edgware.SR3 时没有 RsaProperties 类型的合格 bean

java - 从数据库表中获取结果的更好选择

spring-mvc - 如何使用 Spring Hibernate MVC 将 CSV 文件上传到数据库?