[Java] java合并文本文件并删除文件中重复行 →→→→→进入此内容的聊天室

来自 , 2021-03-17, 写在 Java, 查看 114 次.
URL http://www.code666.cn/view/fbfe5ba2
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.InputStreamReader;
  7. import java.util.Vector;
  8.  
  9. public class CleanFiles {
  10.  
  11.         private static Vector<String> stringlist;
  12.  
  13.         public static void main(String[] args) throws Exception {
  14.                 String filePath1;
  15.                 String filePath2;
  16.                 String filePath3;
  17.                 String item;
  18.                 stringlist = new Vector<String>();
  19.                 BufferedReader buffer = new BufferedReader(new InputStreamReader(
  20.                                 System.in));
  21.                 System.out.println("请输入文件1路径和文件名:");
  22.                 filePath1 = buffer.readLine();
  23.                 System.out.println("请输入文件2路径和文件名:");
  24.                 filePath2 = buffer.readLine();
  25.                 System.out.println("请输入合并后文件路径和文件名");
  26.                 filePath3 = buffer.readLine();
  27.                 File file1 = new File(filePath1);
  28.                 File file2 = new File(filePath2);
  29.                 File file3 = new File(filePath3);
  30.                 buffer.close();
  31.                 buffer = new BufferedReader(new FileReader(file1));
  32.                 while((item=buffer.readLine())!=null){
  33.                         addString(stringlist,item);
  34.                 }
  35.                 buffer.close();
  36.                 buffer = new BufferedReader(new FileReader(file2));
  37.                 while((item= buffer.readLine())!=null){
  38.                         addString(stringlist,item);
  39.                 }
  40.                 buffer.close();
  41.  
  42.                 // 搜索结果是经过排序的,根据此规律删除不合要求File
  43.                 for (int i = 0; i < stringlist.size()-1; i++) {
  44.                         if(stringlist.get(i).equals(stringlist.get(i+1))){
  45.                                 stringlist.remove(i);
  46.                                 if(i!=0)i--;
  47.                         }
  48.                 }
  49.                
  50.                 BufferedWriter bufferWriter = new BufferedWriter(new FileWriter(file3));
  51.                 for(String temp:stringlist){
  52.                         bufferWriter.write(temp);
  53.                         bufferWriter.newLine();
  54.                 }
  55.                 bufferWriter.close();
  56.                
  57.                
  58.         }
  59.  
  60.         public static void addString(Vector<String> allStrings, String str) {
  61.                 if (allStrings.isEmpty()) {
  62.                         allStrings.add(str);
  63.                 } else {
  64.  
  65.                         // 二分查找法
  66.                         int left = 0, right = allStrings.size() - 1, middle, compare;
  67.                         if (str.compareToIgnoreCase(allStrings.get(right)) >= 0) {
  68.                                 allStrings.add(str);
  69.                                 return;
  70.                         }
  71.                         if (str.compareToIgnoreCase(allStrings.get(0)) <= 0) {
  72.                                 allStrings.add(0, str);
  73.                                 return;
  74.                         }
  75.                         while (true) {
  76.                                 middle = (left + right) / 2;
  77.                                 compare = str.compareToIgnoreCase(allStrings.get(middle));
  78.                                 if (compare == 0 || middle == left) {
  79.                                         allStrings.add(middle + 1, str);
  80.                                         return;
  81.                                 } else {
  82.                                         if (compare < 0) {
  83.                                                 right = middle;
  84.                                         } else {
  85.                                                 left = middle;
  86.                                         }
  87.                                 }
  88.                         }
  89.                 }
  90.         }
  91. }
  92.  
  93. //java/5767

回复 "java合并文本文件并删除文件中重复行"

这儿你可以回复上面这条便签

captcha