• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

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

JAVA相关 水墨上仙 2755次浏览

合并两个文本文件,并删除合并后重复的行

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.Vector;
public class CleanFiles {
	private static Vector<String> stringlist;
	public static void main(String[] args) throws Exception {
		String filePath1;
		String filePath2;
		String filePath3;
		String item;
		stringlist = new Vector<String>();
		BufferedReader buffer = new BufferedReader(new InputStreamReader(
				System.in));
		System.out.println("请输入文件1路径和文件名:");
		filePath1 = buffer.readLine();
		System.out.println("请输入文件2路径和文件名:");
		filePath2 = buffer.readLine();
		System.out.println("请输入合并后文件路径和文件名");
		filePath3 = buffer.readLine();
		File file1 = new File(filePath1);
		File file2 = new File(filePath2);
		File file3 = new File(filePath3);
		buffer.close();
		buffer = new BufferedReader(new FileReader(file1));
		while((item=buffer.readLine())!=null){
			addString(stringlist,item);
		}
		buffer.close();
		buffer = new BufferedReader(new FileReader(file2));
		while((item= buffer.readLine())!=null){
			addString(stringlist,item);
		}
		buffer.close();
		// 搜索结果是经过排序的,根据此规律删除不合要求File
		for (int i = 0; i < stringlist.size()-1; i++) {
			if(stringlist.get(i).equals(stringlist.get(i+1))){
				stringlist.remove(i);
				if(i!=0)i--;
			}
		}
		
		BufferedWriter bufferWriter = new BufferedWriter(new FileWriter(file3));
		for(String temp:stringlist){
			bufferWriter.write(temp);
			bufferWriter.newLine();
		}
		bufferWriter.close();
		
		
	}
	public static void addString(Vector<String> allStrings, String str) {
		if (allStrings.isEmpty()) {
			allStrings.add(str);
		} else {
			// 二分查找法
			int left = 0, right = allStrings.size() - 1, middle, compare;
			if (str.compareToIgnoreCase(allStrings.get(right)) >= 0) {
				allStrings.add(str);
				return;
			}
			if (str.compareToIgnoreCase(allStrings.get(0)) <= 0) {
				allStrings.add(0, str);
				return;
			}
			while (true) {
				middle = (left + right) / 2;
				compare = str.compareToIgnoreCase(allStrings.get(middle));
				if (compare == 0 || middle == left) {
					allStrings.add(middle + 1, str);
					return;
				} else {
					if (compare < 0) {
						right = middle;
					} else {
						left = middle;
					}
				}
			}
		}
	}
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明java合并文本文件并删除文件中重复行
喜欢 (0)
加载中……