当前位置: 首页 > 知识库问答 >
问题:

Java bufferedreader未读取文件

慎懿轩
2023-03-14

我有一个名为“add”的方法,它将字符串作为参数,并使用bufferedwriter将其写入文件。完成此操作后,bufferedwriter将被刷新。

在另一个方法“read”中,我遍历文件中的行,但这些行是空的(因此我不能打印它们)。

public String add(String data) throws IOException{

  this.bufferedWriter.write(data);
  this.bufferedWriter.flush();
//this.read(data);
   logger.info("written " +data);
  return data;
}

public String read(String key) throws IOException{
  logger.info("start reading ...: ");
  String line = this.bufferedReader.readLine();

  while (line!= null) {
    logger.info("loop start reading ...: "+line);
    if(line.split(" ").equals(key)) {
       logger.info("reading line: "+line);
       return line;
    }
    line = this.bufferedReader.readLine();
  }

  return "F";  // indicates the key is not in the storage
}
public class FileManager {

Path dataDir;
File f;
FileReader fileReader;
BufferedReader bufferedReader;

FileWriter fileWriter;
BufferedWriter bufferedWriter;

public static Logger logger = Logger.getLogger(FileManager.class.getName());



public FileManager(Path dataDir) throws IOException {
    logger.info("in file manager: ");
    this.dataDir = dataDir;
    
    String dirName = dataDir.toString();

    String fileName = "fifo2.txt";
    File dir = new File (dirName);
    dir.mkdirs();
    f = new File (dir, fileName);
     logger.info("file established at "+f.getAbsolutePath());

    if(!f.exists()){
     logger.info("file not there so create new one ");
      f.createNewFile();
    logger.info("file created!!! ");
    }else{
        logger.info("file already exists");
      System.out.println("File already exists");
    }
    
    logger.info("file stage complete");

    
    this.fileReader = new FileReader(f);
    this.bufferedReader = new BufferedReader(fileReader);
    
    
    this.fileWriter = new FileWriter(f, true);
    this.bufferedWriter = new BufferedWriter(fileWriter);
}

public String add(String data) throws IOException{
    
    this.bufferedWriter.write(data);
    this.bufferedWriter.flush();
    //this.read(data);
     logger.info("written " +data);
    return data;
}

public String read(String key) throws IOException{
    
    logger.info("start reading ...: ");

    
    String line = this.bufferedReader.readLine();
    
    while (line!= null) {
        logger.info("loop start reading ...: "+line);
       if(line.split(" ").equals(key)) {
           logger.info("reading line: "+line);
           return line;
       }
       line = this.bufferedReader.readLine();
    }
    
    return "F";  // indicates the key is not in the storage
}

public String delete(String key) throws IOException{
    
    logger.info("Entering deletion in file storage");

    
    String line;

    while ((line = this.bufferedReader.readLine()) != null) {
       if(line.split(" ").equals(key)) {
           line = "DELETED";
           logger.info("del_reading line: "+line);
           bufferedWriter.write(line);
       }
       line = this.bufferedReader.readLine();
    }
    
    return "F";  // indicates the key to be deleted is not in the storage
}

共有1个答案

左丘照
2023-03-14

您应该尝试在每次对文件执行读/写操作时创建bufferedreader/writer的新实例。确保每次使用后冲洗并关闭。

 类似资料:
  • 我正在youtube上观看关于BufferedReader的教程 https://www.youtube.com/watch?v=yofFVbARIRU 我写的代码和他写的一模一样,但我无法让它工作。我无法使BufferedReader代码正常工作,即使我使用 我用这个代码解决了它: 这也同样有效: 谁能给我解释一下第一个代码出了什么问题?因为这对指导他的人很管用

  • 我在我的windows机器上设置了Elk堆栈,其中包含以下内容: Elasticserach Logstash Kibana 我的logstash.conf 我的日志文件。日志(Apache日志) 当我运行logstash时。conf它在elasticsearch中创建以下索引: 上面的索引为空,无法从我的日志文件中获取任何数据。请帮忙?我对麋鹿很陌生。 当我使用以下方法查询索引logstash-

  • 我试着用上传的文件创建ReadSteam并将管道连接到WriteStream: 但出现了这个错误:

  • 我正在尝试创建一个应用程序,该应用程序使用spring-batch-excel扩展名来读取用户通过web界面上传的Excel文件,以便解析Excel文件中的地址。 当代码运行时,没有错误,但我得到的只是我日志中的以下内容。即使我的处理器和Writer中都有log/syso(它们从未被调用过,我所能想象的是它没有正确读取文件,也没有返回要处理/写入的数据)。是的,这个文件有数据,实际上有几千条记录。

  • 我是Jmeter的新手,正在尝试在HTTP GET请求的路径中使用CSV文件中的变量。 我已经翻阅了这个问题的各种教程和答案,但我还是弄不清我做错了什么。文件只有一个头(ID)。如果我在路径中输入ID,它可以工作,但当我尝试从CSV文件中读取它时,它就失败了:

  • 当我运行以下命令时: 这些列打印为“_col0”、“_col1”、“_col2”等。而不是它们的真实名称,如“empno”、“name”、“Deptno”。 当我在Hive中“description mytable”时,它会正确打印列名,但当我运行“orcfiledump”时,它也会显示\u col0、\u col1、\u col2。我必须指定“schema on read”或其他什么吗?如果是,