Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JAVA搜索和替换文件中的内容_Java_File_File Writing_Fileupdate - Fatal编程技术网

用JAVA搜索和替换文件中的内容

用JAVA搜索和替换文件中的内容,java,file,file-writing,fileupdate,Java,File,File Writing,Fileupdate,我必须编辑一个文件的内容,并将编辑的内容写入另一个文件。以下是iam使用的代码 import java.io.*; import java.util.*; public class TestRef { ArrayList<String> lines = new ArrayList<String>(); String line= null; public void printThis(){

我必须编辑一个文件的内容,并将编辑的内容写入另一个文件。以下是iam使用的代码

  import java.io.*;     
import java.util.*;     

public class TestRef {     
    ArrayList<String> lines = new ArrayList<String>();     
    String line= null;     
    public void printThis(){     
        try{     
    FileReader fr = new FileReader("C:\\Users\\questions.txt");     
    BufferedReader br = new BufferedReader(fr);     
    FileWriter fw = new FileWriter("C:\\Users\\questions_out.txt");     
    BufferedWriter out = new BufferedWriter(fw);     
    while((line=br.readLine()) != null) {  
     if(line.contains("Javascript"))
      line.replace("Javascript"," JAVA");          
        lines.add(line);     
        out.write(line);  
        }                    

        }     
    catch(Exception e){}     
    }     

    public static void main(String [] args){     
            TestRef tr = new TestRef();     
            tr.printThis();     
        }     
} 
import java.io.*;
导入java.util.*;
公共类TestRef{
ArrayList行=新的ArrayList();
字符串行=null;
public void printThis(){
试试{
FileReader fr=新的FileReader(“C:\\Users\\questions.txt”);
BufferedReader br=新的BufferedReader(fr);
FileWriter fw=新的FileWriter(“C:\\Users\\questions\u out.txt”);
BufferedWriter out=新的BufferedWriter(fw);
而((line=br.readLine())!=null){
if(line.contains(“Javascript”))
替换(“Javascript”、“JAVA”);
行。添加(行);
写出(行);
}                    
}     
捕获(例外e){}
}     
公共静态void main(字符串[]args){
TestRef tr=新的TestRef();
tr.printThis();
}     
} 

这就像一次读取一行,然后将其打印回文件。但是当我执行这段代码时,输出文件是空的。?你能给我一个示例代码吗?如何从文件中读取、更改内容并将整个文件写入新文件?

你缺少
out.flush()

BufferedWriter在您刷新它们或它们的缓冲区填满之前不会写入任何内容。

好吧,有几个问题:

  • 您永远不会关闭输入或输出。关闭也将刷新-可能只是没有刷新某些内容。您应该在
    finally
    块中关闭基于流的资源,这样即使遇到异常,它们也会被关闭。(考虑到您应该关闭,我也不需要显式刷新。只需确保您关闭顶级抽象,即
    out
    (和
    br
  • 您正在捕获
    异常
    ,然后将其吞下。很可能是抛出了异常,但您无法判断,因为您吞下了异常。您至少应该记录它,并可能在该点停止。(我还建议捕获
    IOException
    ,而不是
    异常
  • 您使用的是
    FileWriter
    FileReader
    ,这不允许您指定输入/输出编码-这不是问题所在,但我个人喜欢对我使用的编码进行更多控制。我建议使用
    FileInputStream
    FileOutputStream
    包装在
    InputStreamReader
    中,并且<代码>输出流编写器
  • 您正在调用
    String.replace()
    并忽略结果。字符串是不可变的-调用
    replace
    不会更改现有字符串。您想要:

    line = line.replace("Javascript"," JAVA");
    
  • 您从不使用
    变量,而
    变量最好作为局部变量。它只与方法本身相关,因此只在方法中声明它
  • 如果代码的缩进更合适,代码就更容易理解。如果您使用的是IDE,它应该能够为您做到这一点——它在可读性方面有很大的不同

第一个问题最有可能是您当前问题的原因,但其他问题在您解决问题后会有所帮助。(关于“替换”的问题可能是您的下一个问题…

关闭打印机,在循环之外

out.flush();
out.close();

此外,您正在将字符串写入新行,如果您只是想用Java替换javascript,那么您可能还想将“\n”,下一行字符写入新文件,其中旧文件包含新行。

不要捕获异常,什么也不做!您可能正在使用异常-至少添加一个e.printStackTrace()顺便说一句,Java不是缩写词,它只是“Java”,而不是“Java”@JamesClark:是的。不知道我从哪里得到的。Will edit-谢谢你发现了它。不,PrintWriter在那里,它后来被编辑了。我第一次读代码时看到了它@JonSkeet@Zohaib:好的,谢谢你确认我没有发疯。我认为5分钟的编辑宽限期不出现只对答案有意义,但也许吧ps不是。我也有一个疑问,那就是在阅读和写作的过程中如何看待uTF-8字符file@chinchu:当您在FileInputStream上构造InputStreamReader,在FileOutputStream上构造OutputStreamWriter时,通过显式指定编码。您只需关闭即可自动刷新。