在java中创建,编写和编辑相同的文本文件

假设我有以下代码:

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class EditFile { public static void main(String[] args) { try{ String verify, putData; File file = new File("file.txt"); file.createNewFile(); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write("Some text here for a reason"); bw.flush(); bw.close(); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); while( br.readLine() != null ){ verify = br.readLine(); if(verify != null){ putData = verify.replaceAll("here", "there"); bw.write(putData); } } br.close(); }catch(IOException e){ e.printStackTrace(); } } } 

我想做的就是在文本文件中写一些东西,在我的例子中“有些文字出于某种原因”。 然后从我的文件中读取数据,最后从我的文件中更改我的文本“有些文本在这里有一个原因”在“有些文本有一个原因”。 我运行了代码,但所有这一切都是在我的文件中写入“有些文字出于某种原因”。

我试图弄清楚我的代码中可能有什么问题,但不幸的是,这是徒劳的。 任何建议或改写都受到我的高度赞赏。

将您的代码更改为:

 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class EditFile { public static void main(String[] args) { try{ String verify, putData; File file = new File("file.txt"); file.createNewFile(); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write("Some text here for a reason"); bw.flush(); bw.close(); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); while( (verify=br.readLine()) != null ){ //***editted //**deleted**verify = br.readLine();** if(verify != null){ //***edited putData = verify.replaceAll("here", "there"); bw.write(putData); } } br.close(); }catch(IOException e){ e.printStackTrace(); } } } 

问题是你正在调用br.readLine()两次,这会激发应用程序读取line1然后是line2,在你的情况下你只有一行,这意味着你的程序以条件forms读取它并且当它声明时它到变量verify ,它正在停止,因为你没有更多的数据来读取你的文件。

我会这样做:

 import java.io.*; public class EditFile { public static void main(String[] args) { try{ String verify, putData; File file = new File("file.txt"); file.createNewFile(); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write("Some text here for a reason"); bw.flush(); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); while( (verify=br.readLine()) != null ) { if(verify != null) { putData = verify.replaceAll("here", "there"); bw.write(putData); } } br.close(); bw.close(); }catch(IOException e){ e.printStackTrace(); } } } 

使用这段代码,我用它来删除java文件中的日志和System.out语句。 只需更改匹配和替换字符串。

 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class FileReplace { List lines = new ArrayList(); String line = null; Scanner scan = null; public void doIt() { scan = new Scanner(System.in); while (true) { try { System.out .println("enter qualified file name ex.D:\\shiv\\shiv android all\\Main work space\\Welcomescreen1.java"); String path = scan.nextLine(); File f1 = new File(path); FileReader fr = new FileReader(f1); BufferedReader br = new BufferedReader(fr); int i = 0; while ((line = br.readLine()) != null) { if (line.contains("System.out")) { line = line.replace("System.out", "//"); } else if (line.contains("Log.")) { line = line.replace("Log", "//"); } lines.add(i, line); i++; } fr.close(); br.close(); FileWriter fw = new FileWriter(f1); BufferedWriter out = new BufferedWriter(fw); for (int j = 0; j < lines.size(); j++) { System.out.println(j + "." + lines.get(j)); out.append(lines.get(j)); out.newLine(); } out.flush(); out.close(); System.out .println("====================work done==================="); } catch (Exception ex) { ex.printStackTrace(); } } } public static void main(String args[]) { FileReplace fr = new FileReplace(); fr.doIt(); } } 
 import java.io.*; public class TextFile { public static void main(String[] args) { try { String verify, putData; File file = new File("G:\\Dairy.txt"); file.createNewFile(); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write("I am Shah Khalid"); bw.flush(); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); while( (verify=br.readLine()) != null ) { if(verify != null) { putData = verify.replaceAll("here", "there"); //bw.write(putData); } } br.close(); bw.close(); } catch(IOException e) { e.printStackTrace(); } System.out.println("Shah"); } } 

无需键入bw.write(putData); ,因为它只会打印两次声明。
无论你想要什么样的文件,只需给出正确的文件路径并相应地使用上面的代码。

  File file = new File("/tmp/my.txt"); FileWriter fw; BufferedReader br; BufferedWriter bw; boolean no=false; String line; String data=""; String lessonPath="my new line"; try { if(!file.exists()){ fw = new FileWriter(file); bw = new BufferedWriter(fw); bw.write(lessonPath); bw.flush(); bw.close(); }else{ br = new BufferedReader(new FileReader(file)); while((line =br.readLine()) !=null){ if(!no){ data=line; no=true; }else{ data = data+"\n"+line; } } bw = new BufferedWriter(new FileWriter(file)); bw.write(data+"\n"+lessonPath); bw.flush(); bw.close(); } } catch (Exception ex) { ex.printStackTrace(); }