File类
通过File类可以在程序中操作文件和目录,File能新建、删除、重命名文件和目录,但是不能访问文件内容本身。
理解I/O流
- 流(stream)是从起源(source)到接收(sink)的有序数据。
- Java的I/O流使用了装饰器模式,将I/O流分成底层节点流和上层处理流。
- Java的I/O提供四个抽象基类不能创建实例
- 八位字节流以InputStream和OutputStream为基类
- 十六位的字符流以Reader和Writer为基类
- 方法
- 输入流
- int read()
- int read(byte[] b)
- 输出流
- void write(int c)
- void write(String s)
- 输入流
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FiieTest { public void readFile()throws IOException { //创建字节输入流 FileInputStream fis = new FileInputStream("FileTest.java"); //创建取文件的容器 byte[] bbuf = new byte[1024]; //保存实际读取的字节数 int hasRead = 0; //在容器中循环取字节 while ((hasRead = fis.read(bbuf)) > 0) { //将字节数组转换成字符串 System.out.println(new String(bbuf, 0, hasRead)); } //关闭文件流,放在finally块里更安全 fis.close(); } public void writeFile()throws IOException { //java7使用try语句保证输入流自动关闭 try ( FileInputStream fis = new FileInputStream("FileTest.java"); FileOutputStream fos = new FileOutputStream("FileTest.txt")) { byte[] bbuf = new byte[32]; int hasRead = 0; while ((hasRead = fis.read(bbuf)) > 0) { fos.write(bbuf, 0, hasRead); } }catch (IOException e) { e.printStackTrace(); } }}
处理流
使用处理流操作更简单,执行效率更高
//使用PrintStream处理流包装OutputStream public void printTest() throws IOException{ try ( FileOutputStream fos = new FileOutputStream("test.txt"); PrintStream ps = new PrintStream(fos)){ ps.println("p普通字符串"); ps.println(new FileTest()); } catch (IOException e) { e.printStackTrace(); } }