我有以下代表书籍的文件
Book: ISBN=3 title=english1 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john] ------------------------- Book: ISBN=5 title=english2 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john2] ------------------------- Book: ISBN=6 title=english3 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john3] -------------------------
我试图使用此功能从文件中删除第二本书:功能:
public static void removeLineFromFile(String file, String start, String end) { try { File inFile = new File(file); //Construct the new file that will later be renamed to the original filename. File tempFile = new File(inFile.getAbsolutePath() + ".tmp"); BufferedReader br = new BufferedReader(new FileReader(file)); PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); String line = null; Boolean flag=true; //Read from the original file and write to the new //unless content matches data to be removed. while ((line = br.readLine()) != null) { if (line.trim().equals(start)) { flag=false; } if(line.trim().equals(end)){ flag=true; } if (flag && !(line.trim().equals(end))){ pw.println(line); pw.flush(); } } pw.close(); br.close(); //Delete the original file if (!inFile.delete()) { System.out.println("Could not delete file"); return; } //Rename the new file to the filename the original file had. if (!tempFile.renameTo(inFile)) System.out.println("Could not rename file"); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }
函数调用:
public static void main(String[] args) { removeLineFromFile("E:\\file.txt", "Book: ISBN=5","-------------------------") }
这本书被删除但另一个"-------------------------"分隔符也被删除了
Book: ISBN=3 title=english1 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john] Book: ISBN=6 title=english3 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john3]
我该怎么做才能获得以下结果:
Book: ISBN=3 title=english1 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john] ------------------------- Book: ISBN=6 title=english3 publishDate=1/12/2015 pageCount=200 authors=[12, 11, john3] -------------------------
BlackHatSamu.. 7
这是我能想到的最简单的解决方案:
public static void removeLineFromFile(String file, String start, String end) { try { File inFile = new File(file); //Construct the new file that will later be renamed to the original filename. File tempFile = new File(inFile.getAbsolutePath() + ".tmp"); BufferedReader br = new BufferedReader(new FileReader(file)); PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); String line = null; Boolean flag=true; //Read from the original file and write to the new //unless content matches data to be removed. while ((line = br.readLine()) != null) { if (line.trim().equals(start)) { flag=false; } if (flag){ pw.println(line); pw.flush(); } if(line.trim().equals(end)){ flag=true; continue; } } pw.close(); br.close(); //Delete the original file if (!inFile.delete()) { System.out.println("Could not delete file"); return; } //Rename the new file to the filename the original file had. if (!tempFile.renameTo(inFile)) System.out.println("Could not rename file"); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }
问题是你过早地设置了标志,因此没有打印出来.
这是我能想到的最简单的解决方案:
public static void removeLineFromFile(String file, String start, String end) { try { File inFile = new File(file); //Construct the new file that will later be renamed to the original filename. File tempFile = new File(inFile.getAbsolutePath() + ".tmp"); BufferedReader br = new BufferedReader(new FileReader(file)); PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); String line = null; Boolean flag=true; //Read from the original file and write to the new //unless content matches data to be removed. while ((line = br.readLine()) != null) { if (line.trim().equals(start)) { flag=false; } if (flag){ pw.println(line); pw.flush(); } if(line.trim().equals(end)){ flag=true; continue; } } pw.close(); br.close(); //Delete the original file if (!inFile.delete()) { System.out.println("Could not delete file"); return; } //Rename the new file to the filename the original file had. if (!tempFile.renameTo(inFile)) System.out.println("Could not rename file"); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }
问题是你过早地设置了标志,因此没有打印出来.