Java文件搜索问题

Java文件搜索问题,java,file-io,Java,File Io,我需要在一个文件中搜索一个单词,然后返回整行和带有该单词的行号,然后编辑该行并写回该文件。在文件中编辑行可能不需要行号。在使用regexp搜索并打开文件的filechannel后,我正在阅读,但我无法获得行号。也许还有其他更好的方法。你能帮我怎么开始吗?首先,为了避免潜在的误解,你不能仅仅通过指出行号和更改行来动态编辑文件。您需要以任何方式读取整个内容并将整个内容写回同一个文件,即使您只需要编辑单个字符 至于行号,您只需向循环中添加一个增量计数器,在该循环中,您可以使用。您也可以使用,但这并不像

我需要在一个文件中搜索一个单词,然后返回整行和带有该单词的行号,然后编辑该行并写回该文件。在文件中编辑行可能不需要行号。在使用regexp搜索并打开文件的filechannel后,我正在阅读,但我无法获得行号。也许还有其他更好的方法。你能帮我怎么开始吗?

首先,为了避免潜在的误解,你不能仅仅通过指出行号和更改行来动态编辑文件。您需要以任何方式读取整个内容并将整个内容写回同一个文件,即使您只需要编辑单个字符

至于行号,您只需向循环中添加一个增量计数器,在该循环中,您可以使用。您也可以使用,但这并不像初学者所期望的那样有效。例如,
setLineNumber()
实际上没有跳过行到给定行。

为什么不这样做呢

   BufferedReader reader = new BufferedReader(new FileReader(file));
   BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));

    int lineNo = 0;
    String line;        
    while ((line = reader.readLine()) != null) {
        lineNo++;
        if (line.contains("word")) {
            //manipulate line
            line = "changed content";
        }
        writer.write(line);
    }        

    reader.close();
    writer.close();
或者在你读了整个文件后再写

警告:要正确处理编码,应使用:

new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
// the same for the writer

这是家庭作业吗?如果不是,那么java似乎不是解决这个问题的最明显的选择。我想自己解决这个问题我认为这不是一件小事,所以不能做家庭作业。我需要java,因为我的应用程序的另一部分是用java编写的,我在考虑JNI+c代码,但可能太复杂了。所以在我做之前,我试着用Java解决这个问题。我做了一些研究,在一个网站上发现,我可以用RandomAccessFile编辑一个文件。也许那不是真的。你怎么认为?我需要试一试。好的,就是这样:您可以阅读以下内容:“下面的代码片段使用一种新的字节通道方法打开一个文件进行读写操作。”与
RandomAccessFile
的区别在于,您需要知道字节位置,而不是行号。这在处理字符数据/行时不是很有用。好的,这是真的,但是有什么好的解决方案吗?或者你能给我推荐点什么吗?因为我不想先读取整个文件,然后再重写它。要重写它,你需要以任何方式读取整个文件。另见第一段。你不能只做
输出。写(换行)
。这将仅用该行覆盖整个文件。