最近做报表的时候发现以前的关于文件的读写并没有用到了,用easyexcel这些封装太厉害,以至于大部分的读写对开发者而言都是黑盒的;这么一来就想着写一个能让自己记起来的读写,万一哪天需要用到好随取随用
了解io
io分为2大类(这里只写最简单的,不深入去解析):
1)字节流io(可以处理所有文件):
【1】:输入字节流->InputStream
先看例子:
@Test public void test001() throws Exception{ File file = new File("C:\\Users\\xun\\Desktop\\新建文本文档.txt"); InputStream inputStream = new FileInputStream(file); byte b[] = new byte[1024]; while (inputStream.read(b)!=-1){ String str=new String(b); System.out.println(str); } inputStream.close(); }
这是一个很简单的读文件,需要先使用file获取文件,然后利用FileInputStream来转化成流,利用流的read方法读取文件内容;实际开发工程中,文件一般是使用MultipartFile来作为参数传递给后台,后台可以直接使用MultipartFile的getInputStream方法获取流;然后就是正常读写。
【2】:输出字节流->OutputStream
先看例子:
@Test public void test05() throws Exception{ OutputStream outputStream = new FileOutputStream(new File("C:\\Users\\xun\\Desktop\\新建文本文档1.txt")); outputStream.write(97); outputStream.close(); }
这种写文件基本很少用到,一般生成的是excel,使用的Workbook的write写入,仅作了解
2)字符流io(只能处理文本类,Unicode编码,一个字符占用2个字节):
【1】:输入字符流->Reader
例子:
@Test public void test03() throws Exception{ FileReader fileReader = new FileReader("C:\\Users\\xun\\Desktop\\新建文本文档.txt"); BufferedReader bufferedReader = new BufferedReader(fileReader); String line = null; while ((line=bufferedReader.readLine())!=null){ System.out.println(line); } bufferedReader.close(); }
跟字节读差别不大,区别在于使用的是reader下的子类
【2】:输出字符流->Writer
@Test public void test04() throws Exception{ FileWriter fileWriter = new FileWriter("C:\\Users\\xun\\Desktop\\新建文本文档1.txt"); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write("sw123"); bufferedWriter.close(); }
开发中一般不做使用这种直接写入
字节和字符也可以相互转化:
InputStreamReader和OutputStreamWriter
这里写一个例子:
@Test public void test002() throws Exception{ File file = new File("C:\\Users\\xun\\Desktop\\新建文本文档.txt"); InputStream inputStream = new FileInputStream(file); InputStreamReader reader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(reader); String line = null; while ((line=bufferedReader.readLine())!=null){ System.out.println(line); } }