`
javaboy2006
  • 浏览: 183482 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

去掉重复值IO操作

    博客分类:
  • 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;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class IoTest {

	private static final String DIR_PATH = "C:\\新建文件夹";
	private static final String WRITE_FILE_PATH = "C:\\新建文件夹\\output\\test.txt";
	private static int readFileCount = 0;

	public static void main(String[] args) {
		Set<String> userIdSet = new LinkedHashSet<String>();
		List<String> filePathList = getFileNames(DIR_PATH);
		for (String filePath : filePathList) {
			readFile(filePath, userIdSet);
		}
		writeFile(WRITE_FILE_PATH, userIdSet);
	}

	private static void writeFile(String writeFilePath, Set<String> userIdSet) {
		File dir = new File(writeFilePath.substring(0, writeFilePath
				.lastIndexOf("\\")));
		if (!dir.exists()) {
			dir.mkdirs();
		}
		File file = new File(writeFilePath);
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		FileWriter fileWriter = null;
		BufferedWriter bufferedWriter = null;
		try {
			fileWriter = new FileWriter(writeFilePath, false);// 第二个参数表示:是否为追加模式
			bufferedWriter = new BufferedWriter(fileWriter);
			int writeFileCount = 0;
			for (Object userId : userIdSet) {
				bufferedWriter.write(userId.toString());
				bufferedWriter.newLine();
				System.out.println(++writeFileCount + " : " + userId.toString()
						+ " write");
			}
			bufferedWriter.write("=====end=====");
			bufferedWriter.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (bufferedWriter != null) {
					bufferedWriter.close();
				}
				if (fileWriter != null) {
					fileWriter.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void readFile(String readFilePath, Set<String> userIdSet) {
		String userId;
		FileReader fileReader = null;
		BufferedReader bufferedReader = null;
		try {
			fileReader = new FileReader(readFilePath);
			bufferedReader = new BufferedReader(fileReader);
			while ((userId = bufferedReader.readLine()) != null) {
				userIdSet.add(userId);
				System.out.println(++readFileCount + " : " + userId + " read");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
				if (fileReader != null) {
					fileReader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 获得目录下所有文件完整路径
	 * @param dirPath 目录路径
	 * @return
	 */
	private static List<String> getFileNames(String dirPath) {
		List<String> filePathList = new ArrayList<String>();
		File rootFile = new File(dirPath);
		String[] nameArray = rootFile.list();
		for (int i = 0; i < nameArray.length; i++) {
			File tempFile = new File(rootFile.getPath(), nameArray[i]);
			if (tempFile.isFile()) {
				filePathList.add(dirPath + "\\" + nameArray[i]);
			}
		}
		return filePathList;
	}
}
分享到:
评论

相关推荐

    python入门到高级全栈工程师培训 第3期 附课件代码

    06 阻塞IO与非阻塞IO 07 select及触发方式 08 select监听多连接 09 select与epoll的实现区别 第36章 01 异步IO 02 selectors模块介绍 03 selectors模块应用 04 作业介绍 第37章 01 selctors实现文件上传与下载 ...

    Oracle9i的init.ora参数中文说明

    这种操作模式提供可重复的读取, 并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | FALSE 默认值: FALSE row_locking: 说明: 指定在表已更新或正在更新时是否获取行锁。如果设置为 ...

    精易模块[源码] V5.15

    4、新增“注册表操作Ex-&gt;写QWORD_64值”写入64位长整数值,成功返回真,失败返回假.源码由@pp25729391提供。 5、修正“类_APIHOOK-&gt;取地址”当安装时不填后缀,而取地址填写后无法获取已安装地址BUG,感谢易友【@...

    超级有影响力霸气的Java面试题大全文档

    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是...

    java 面试题 总结

    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是...

    SQL性能优化

     任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。  避免不必要的类型转换,要了解“隐藏”的类型转换。  增加查询的...

    freemarker总结

    trim:去掉字符串前后的空白字符 下面是集合的常用内建函数 size:获取序列中元素的个数 下面是数字值的常用内建函数 int:取得数字的整数部分,结果带符号 例如: ${test?html} ${test?upper_case?html} 结果...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例058 用TreeSet生成不重复自动排序 随机数组 71 实例059 Map映射集合实现省市级联选择框 73 第4章 字符串处理技术 75 4.1 格式化字符串 76 实例060 把数字格式化为货币字符串 76 实例061 格式化当前日期 77 实例...

    net学习笔记及其他代码应用

    ” IO.SYS” &gt;&lt;/File&gt; &lt;/DriverC&gt; &lt;/FileSystem&gt; [Page] 请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。 答: void FindFile( Directory d ) { FileOrFolders = d.GetFileOrFolders(); foreach...

    c语言编写单片机技巧

    一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。平时可以多看看相关的电子技术杂志网站,看看别人的...

    【05-面向对象(下)】

    •给局部变量赋初始值,只能一次,不能重复。 final修饰基本类型和引用类型 •当使用final修饰基本数据类型时,不能对其重新赋值,不能被改变。 •但对引用类型的变量而言,它仅仅保存的是一个引用,...

    MaxDOS 5.6s U盘版

    很好用的U盘系统盘制作工具这次出的所谓MaxDOS 密码读取工具,其实只是读取了安装日志LOG里的设置值,并不是真正的MD5值被编译,本来不想保留这个东西的,但是如果不保留这个LOG文件的话,又无法完成自动卸载,怕有些人又...

    C# for CSDN 乱七八糟的看不懂

    foreach foreach 语句为对数组或者集合中的每个元素重复执行嵌入语句。对于数组 示例为: using System; class MainClass { public static void Main() { int odd = 0, even = 0; int[] arr = new int [] {0,1,2,5,...

    飞恒进销存管理系统v7.21(源代码)

    2、增加商品出入库明细表(新增视图RP_AllIO_Detail和存储过程vAllDetail) 2006-04-12 1、 修正修改其它出入仓类型有错的问题 2、 修正其它出入仓删除行仓库数就不对的错误 2006-05-18 1、前台收银中增加营业员选择...

    grub4dos-V0.4.6a-2017-02-04更新

    背景色最好为白色或黑色,这样可以去除一些灰色杂波。若是彩色背景,则应当非常干净。 提醒:请以16进制方式输入。否则易错。 延迟[delay]:序列图像之间的延迟。单位是滴答,即1/18.2秒。 序列数[last_num]:...

    Linux多线程服务端编程:使用muduo C++网络库

    4.6多线程与IO . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 98 4.7用RAII 包装文件描述符.. . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.8RAII 与fork() . . . . . . . . . ....

Global site tag (gtag.js) - Google Analytics