简谈JAVA基础--IO流
来源:互联网 发布:pdf阅读器下载 知乎 编辑:程序博客网 时间:2024/05/20 03:45
Java.io.File类用于展示文件或目录的信息,但是无法用来进行对文件的操作。
通过io流来对文件进行读写操作。
io流分为字节流和字符流
1、字节流
InputStream、OutputStream
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
EOF = End 读到-1就读到结尾
输入流基本方法
int b = in.read();读取一个字节无符号填充到int低八位.-1是 EOF
in.read(byte[] buf)
in.read(byte[] buf,int start,int size)
输出流基本方法
out.write(int b) 写出一个byte到流,b的低8位
out.write(byte[] buf)将buf字节数组都写入到流
out.write(byte[] buf,int start,int size)
读取文件可以通过FileInputStream,DataInputStream,BufferedInputStream (全部继承InputStream)
FileInputStream 实例化可以传递一个File(文件) 或者一个String(文件路径)
通过read来读取文件,当返回值 为 -1时代表文件读取完毕。
DataInputStream是对流功能的一些扩展,封装了对Int、Double、UTF等类型的操作。
实例化参数是一个 InputStream类型参数。
BufferedInputStream是带缓冲的流,在对较大文件操作时效率会更快。提高了IO的性能
实例化参数是一个 InputStream类型参数。
写出文件可以通过FileOutputStream,DataOutputStream,BufferedOutputStream (全部继承OutputStream,与input成对使用)
具体实现:
File (遍历目录中的所有文件及其子目录文件,打印文件名称)
private static void findFiles(File fileDir) { if (!fileDir.exists()) { throw new IllegalArgumentException(fileDir + "目录不存在"); } if (!fileDir.isDirectory()) { throw new IllegalArgumentException(fileDir + "不是一个目录"); } File[] files = fileDir.listFiles(); for (File file : files) { if (file != null && file.length() > 0) { if (file.isDirectory()) { findFiles(file); } else { System.out.println(file); } } }}
字节流
private static void copyFile(File srcFile, File destFile) throws IOException{ FileOutputStream out = null; try{ if (!srcFile.exists()){ System.out.println(srcFile + "文件不存在"); } if (!srcFile.isFile()){ System.out.println(srcFile + "不是一个文件"); } FileInputStream in = new FileInputStream(srcFile); out = new FileOutputStream(destFile); byte[] bytes = new byte[1024]; int b; while ((b = in.read(bytes,0,bytes.length)) != -1){ out.write(bytes,0,b); out.flush(); } }catch (Exception e){ System.out.println("系统错误"); }finally { out.close(); } }
private static void copyFileByBuffer(File srcFile, File destFile) throws IOException{ BufferedOutputStream out = null; try{ if (!srcFile.exists()){ System.out.println(srcFile + "文件不存在"); } if (!srcFile.isFile()){ System.out.println(srcFile + "不是一个文件"); } BufferedInputStream in = new BufferedInputStream(new FileInputStream(srcFile)); out = new BufferedOutputStream(new FileOutputStream(destFile)); byte[] bytes = new byte[1024]; int b; while ((b = in.read(bytes)) != -1){ out.write(bytes,0,b); out.flush(); } }catch (Exception e){ System.out.println("系统错误"); }finally { out.close(); } }
2.字符流
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件以byte存储
字符流(Reader Writer)操作的是文本
字符的处理,一次处理一个字符
字符的底层依然是通过字节处理
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/FileWriter
字符流的过滤器
BufferedReader ---->readLine 一次读一行
BufferedWriter/PrintWriter ---->写一行
实现:
private static void fileReadAndFileWrite() throws IOException { FileReader fr = new FileReader("/Users/yukaiji/java/ab.txt"); FileWriter fw = new FileWriter("/Users/yukaiji/java/cd.txt"); try { char[] chars = new char[2056]; int i; while ((i = fr.read()) != -1) { fw.write(chars, 0, i); fw.flush(); } } catch (Exception e) { System.out.println("系统错误"); } finally { fw.close(); } }
阅读全文
0 0
- 简谈JAVA基础--IO流
- JAVA 基础IO流
- java基础:IO流
- Java基础-->IO流
- Java IO流基础
- java基础---IO流
- Java基础:IO流
- Java基础---IO流
- JAVA基础----IO流
- Java基础---IO流
- Java基础-IO流
- Java基础--------IO流
- 【java基础】]IO流
- java基础 IO流
- Java基础--IO流
- JAVA IO流 基础
- Java IO流基础
- Java IO流基础
- 事件驱动模型概述
- Spring Boot执行repackage打包与Source must refer to an existing file异常解决
- Error:java: 无效的目标发行版: 1.8
- LayoutInflater源码分析
- Centos6.5安装docker
- 简谈JAVA基础--IO流
- nginx学习随笔--pid
- jsp简介和el标签 jstl标签
- python安装numpy、scripy失败总结
- 树状数组求逆序数
- 校招准备系列:每天一道算法题(9)-单例
- table border合并无间隙 列宽度固定不换行
- 精致傲娇的品牌 只卖呆萌的价格 对对全自动外卖打印机评测
- 设计模式转载