java IO整理及读写文件常见方式
一:流的概念和作用
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在设备间传输称之为流。
流的本质是数据传输,根据数据传输的特性将流区分为各种类,方便更直观的进行数据操作。
二:流的分类
- 根据处理数据类型的不同分为:字符流和字节流
- 根据数据流向不同分为:输入流和输出流
2.1 字节流和字符流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:
- 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
- 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
更详细可参考:
https://www.cnblogs.com/cberblog/p/15480083.html
2.2 输入和输出流
对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
三:IO流继承关系图
四:java读写文件常见方式
4.1一次读取所有文件
String path = "/Users/changfan/test.txt"; FileInputStream file = new FileInputStream(path); int available = file.available(); byte[] bytes = new byte[available]; int read = file.read(bytes); System.out.println(new String(bytes)); file.close();
4.2 按行读取
String path = "/Users/changfan/test.txt"; BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(path))); String line = null; int count =0 ; while ( null!=(line = bufferedReader.readLine())){ System.out.println("第[" + count + "]行数据:[" + line + "]"); count++; }
4.3 字节流按行读取
String path = "/Users/changfan/test.txt"; StringBuffer stringBuffer = new StringBuffer(); InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path), "UTF-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String s = bufferedReader.readLine(); while (s!=null){ stringBuffer.append(s).append("\r\n"); s = bufferedReader.readLine(); } System.out.println(stringBuffer);
4.4 写文件
String s = "长帆"; File file = new File("/Users/changfan/test1.txt"); BufferedWriter bw = null; if (file.exists()){ FileOutputStream fileOutputStream = new FileOutputStream(file); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream, "utf-8")); bufferedWriter.write(s); bufferedWriter.flush(); bufferedWriter.close(); }else { System.out.println("文件不存在"); }
参考链接
https://zhuanlan.zhihu.com/p/25418336
https://www.cnblogs.com/cberblog/p/15480083.html
非学无以广才,非志无以成学。
正是因为今天的不完美,才对未来充满希望。
----长帆