前言
IO流
什么是IO?
Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 什么是流? 在 Java 中所有数据都是使用流读写的。流是一组有序的数据序列,将数据从一个地方带到另一个地方。根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种
File类
File类概述和构造方法
File类的介绍
- 它是文件和目录路径名的抽象表示
- 文件和目录是可以通过File封装成对象的
- 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
File类的构造方法
方法名 | 说明 |
---|
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 | File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File实例 | File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File实例 |
File f1 = new File("E:\\itcast\\java.txt");
File f2 = new File("E:\\itcast","java.txt");
File f3 = new File("E:\\itcast");
File f4 = new File(f3,"java.txt");
File类创建功能
方法名 | 说明 |
---|
public boolean createNewFile() | 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 | public boolean mkdir() | 创建由此抽象路径名命名的目录 | public boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 |
File f1 = new File("E:\\itcast\\java.txt");
f1.createNewFile();
File f2 = new File("E:\\itcast\\JavaSE");
f2.mkdir();
File f3 = new File("E:\\itcast\\JavaWEB\\HTML");
f3.mkdirs();
File类判断和获取功能
-
判断功能
方法名 | 说明 |
---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 | public boolean isFile() | 测试此抽象路径名表示的File是否为文件 | public boolean exists() | 测试此抽象路径名表示的File是否存在 |
-
获取功能
方法名 | 说明 |
---|
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 | public String getPath() | 将此抽象路径名转换为路径名字符串 | public String getName() | 返回由此抽象路径名表示的文件或目录的名称 | public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 | public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
File f = new File("myFile\\java.txt");
System.out.println(f.isDirectory());
System.out.println(f.isFile());
System.out.println(f.exists());
System.out.println(f.getAbsolutePath());
System.out.println(f.getPath());
System.out.println(f.getName());
File类删除功能
方法名 | 说明 |
---|
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |
IO流
- IO流介绍
- IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载
- IO流的分类
- IO流的使用场景
- 如果操作的是纯文本文件,优先使用字符流
- 如果操作的是图片、视频、音频等二进制文件。优先使用字节流
- 如果不确定文件类型,优先使用字节流。字节流是万能的流
字节流
字节流抽象基类
- InputStream:这个抽象类是表示字节输入流的所有类的超类
- OutputStream:这个抽象类是表示字节输出流的所有类的超类
- 子类名特点:子类名称都是以其父类名作为子类名的后缀
字节输出流
FileOutputStream(String name) 写数据
字节输出流写数据的三种方式
方法名 | 说明 |
---|
void write(int b) | 将指定的字节写入此文件输出流 一次写一个字节数据 | void write(byte[] b) | 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据 | void write(byte[] b, int off, int len) | 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据 |
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
fos.write(97);
fos.write(98);
fos.write(99);
fos.write(100);
fos.write(101);
byte[] bys = {97, 98, 99, 100, 101};
byte[] bys = "abcde".getBytes();
fos.write(bys);
fos.write(bys,1,3);
写数据的两个小问题
-
字节流写数据如何实现换行
- windows:\r\n
- linux:\n
- mac:\r
-
字节流写数据如何实现追加写入
- public FileOutputStream(String name,boolean append)
- 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt",true);
for (int i = 0; i < 10; i++) {
fos.write("hello".getBytes());
fos.write("\r\n".getBytes());
}
字节输入流
FileInputStream(String name) 读数据 read()方法;
字节缓冲流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\bos.txt"));
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
bos.close();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myByteStream\\bos.txt"));
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}
|