簡體   English   中英

FileWriter / BufferedReader Java單詞查找器

[英]FileWriter / BufferedReader Java word finder

我已經設置了這段代碼,我試圖編寫一個程序,該程序可以查看文件並找到特定的隱藏秘密單詞,然后將單詞替換為“ found!”。 然后在控制台中重新打印文本文件。 我知道如何使用閱讀器和書寫器,但是我不確定如何才能統一使用它們。 代碼如下:

讀者類別:

package Main;

import java.io.*;

public class Read {

private static String line;
FileReader in;
File file;

public Read() {
    line = "";
}
public void readFile() throws IOException {
    file = new File("C:examplePathName\\ReadWriteExp.txt");
    in = new FileReader(file);
    BufferedReader br = new BufferedReader(in);
    while((line = br.readLine()) != null) {
        System.out.println(line);
    }
    in.close();
}


public String getLine() {
    return line;
}

public File getFile() {
    return file;
}

}

Writer(change)類:

package Main;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Change {

public static void main(String[] args) throws IOException{
    Read r = new Read();

    String line = r.getLine();
    FileWriter fw = new FileWriter(r.getFile());
    while(line != null) {
        if(line.equals("example")) {
            fw.write("found!");

        }
        System.out.println(line);
    }

}

}

我是在正確的道路上嗎,還是應該將兩者都歸為一類。 這也是寫入文本文件中特定行的正確方法嗎?

如果您要做的只是將轉換后的文本打印到系統中(而不是將其寫到文件中),則實際上不需要第二類。 您可以在Read類的readFile()方法中完成所需的操作:

public void readFile() throws IOException {
  file = new File("C:examplePathName\\ReadWriteExp.txt");
  in = new FileReader(file);
  BufferedReader br = new BufferedReader(in);
  while((line = br.readLine()) != null) {
    System.out.println(line.replaceAll("example", "found!"));
  }
  in.close();
}

您還可以進行許多其他調整,但這是您在問題中指定的功能的核心。

如果文件大小合理,則可以將其讀入內存,更改所需內容,然后再次寫回:

public static void replaceOccurrences(String match, String replacement, Path path) throws IOException {
    Files.write(path, Files.lines(path).map(l -> {
        if(l.contains(match)) {
            return l.replace(match, replacement);
        } else {
            return l;
        }
    }).collect(Collectors.toList()));
}

另外,如果您知道搜索詞僅出現一次,並且只需要查找出現的位置,請使用以下命令:

try(BufferedReader reader = Files.newBufferedReader(path)) {
    int lineIndex = 0;
    String line;
    while(!(line = reader.readLine()).contains(match)) {
        lineIndex++;
    }
    System.out.println(lineIndex); // line which contains match, 0-indexed
    System.out.println(line.indexOf(match)); // starting position of match in line, 0-indexed
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM