前言:上一篇文章讲到了文件下载,本文就讲述文件导入。对于文本文件的处理,大家肯定条件反射出IO流,而且第一个想到的是字符流。但是对于该这个需求来说,常用的IO流已经不能满足这个要求了,所有就有了NIO的学习。
常用的IO流。
下述为常用的IO流,使用这些API能够一些基本的IO操作。例如,文件拷贝、文件导出、文件读取等操作,但是这些都是最简单最基本的操作。在使用这些api的过程中,需要注意一些细节设置,建议在学习IO流操作的过程中将JVM堆内存调小,可以调至256M或128M,甚至更小,具体调成多少还需结合具体业务,主要是要注意是否一次性把文件加载到内存或者读取的数据量集合过大,避免线上发生内存溢出等问题。(直线谁都快,弯道快才是真的快!)
@Test
public void test1() throws Exception {
File file = new File("");
//字节输入流
InputStream fis = new FileInputStream(file);
//字节输出流
OutputStream fos = new FileOutputStream(file);
//字符输入流
Reader reader = new FileReader(file);
//字符输出流
Writer writer = new FileWriter(file);
//字节缓冲流
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//字符缓冲流
BufferedReader bufferedReader = new BufferedReader(reader);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
//转换流 字节流转字符流
InputStreamReader isr = new InputStreamReader(fis);
OutputStreamWriter osw = new OutputStreamWriter(fos);
//打印流
PrintWriter printWriter = new PrintWriter(file);
PrintStream printStream = new PrintStream(file);
//了解 什么时候使用过
InputStream in = System.in;
PrintStream out = System.out;
}
业务需求
现有一个超大文本文件(大小在10G左右,行数在4600w左右),要求将这一个大文本文件分割成多个小文本文件,每个小文本文件的行数为10w。