使用java的输入输出流将一个文本文件的内容按行读取,每读一行就顺序添加行号,并写入到另一个文件中?
Scanner sc=new Scanner(new File("abc.txt"));
int c=1;
FileWriter fw =new FileWriter("sf.txt");
while(sc.hasNextLine()){
String s=c+sc.nextLine();
fw.write(s+"\r\n");
fw.flush();
c++;
}
fw.close();
sc.close();
java读文件取得换行符?
提示,不要通过字节流或者是字符流的形式进行读取,可以直接通过BufferedReader 流的形式进行流读取,就没有换行符无法区分的问题,之后通过readLine方法获取到流的内容。
BufferedReader bre = null;try {String file = "D:/test/test.txt"
;bre = new BufferedReader(new FileReader(file))
;//此时获取到的bre就是整个文件的缓存流while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{System.out.println(str)
;//原样输出读到的内容};备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
如何利用java把文件中的Unicode字符转换为汉字?
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。 BufferedReader bre = null;try {String file = "D:/test/test.txt"
;bre = new BufferedReader(new FileReader(file))
;//此时获取到的bre就是整个文件的缓存流while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{System.out.println(str)
;//原样输出读到的内容(unicode会自动转换为中文的)};备注:unicode不需要转换的,直接输出即可,会自动变成中文,如:System.out.println("\u0061\u0062\u6c49\u5b57")
;结果就是:ab汉字。
Java如何从数据库中导出100W的数据又快又不内存溢出?
第一种方法,Java调用一下shell脚本,用shell脚本去执行导出CSV到一个文件夹,然后再下载,完事,因为用其它方式导出会更加高效,内存和速度都很快。
我记得以前在电信里面工作的时候,经常要导数据,数据量也不是很多,但是次数频繁,基本都是和运维合作搞一个脚本调用然后下载,shell的导出方式很快,内存占用不高,不过导出之后还要上传到应用目录下下载,调试过程比较麻烦。
第二种办法,就是用Java去导出来,但是导的时候要做一个处理,例如导出Excel或者TXT的时候,可以起两个线程,中间见一个队列,一个线程每次去读5000回来放队列里面,另一边每次消费1000条再去刷磁盘,不要一条刷一次,把读写分离开来,可以达到一个比较优化的地步,如果还想更优化的话,可以试试研究磁盘顺序写,那些mq就基本都是顺序写磁盘加快速度的。
其实不管用什么办法,都要结合自己团队和项目情况来,工期和效率要适中,毕竟还是要根据项目的目标来完成功能。