Java IO流
程序员文章站
2022-04-03 07:58:34
...
IO流
File类:
File的常⽤⽅法:
- public File(String pathname) 根据路径创建对象
- public String getName() 获取⽂件名
- public String getParent() 获取⽂件所在的⽬录
- public File getParentFile() 获取⽂件所在的⽬录对应的File对象
- public String getPath() 获取⽂件路径
- public boolean exists() 判断对象是否存在
- public boolean isDirectory() 判断对象是否为⽬录
- public boolean isFile() 判断对象是否为⽂件
- public long length() 获取⽂件的⼤⼩,以字节为单位
- public boolean createNewFile() 根据当前对象创建新⽂件
- public boolean delete() 删除对象
- public boolean mkdir() 根据当前对象创建新⽬录
- public boolean renameTo(File dest) 为已存在的对象重命名
以下为参考代码:
public class fileTest {
public static void main(String[] args) {
String pathName = "C:/Users/73981/Desktop/test/test2";
File file = new File(pathName);
//判断该文件是否存在 --- file.exists()
if(file.exists()) {
//获取文件名 --- file.getName()
System.out.println("该文件名为: " + file.getName());
//获取⽂件所在的⽬录
System.out.println("该文件所在的目录为: " + file.getParent());
//获取⽂件所在的⽬录对应的File对象
System.out.println(file.getParentFile());
//获取⽂件路径
System.out.println("文件路径为: " + file.getPath());
//判断对象是否为⽬录
System.out.println("该对象是否为一个目录: " + file.isDirectory());
//判断对象是否为⽂件
System.out.println("该对象是否为一个文件: " + file.isFile());
//获取⽂件的⼤⼩,以字节为单位
System.out.println("该文件的大小为: "+ file.length());
//删除对象(文件、目录皆适用)
// System.out.println("删除对象: " + file.delete());
//为已存在的对象重命名
File file3 = new File("C:/Users/73981/Desktop/test测试");
System.out.println("重命名: " + file.renameTo(file3));
}else{
//根据当前对象创建新⽂件,如果该文件已经存在不能重复创建。
// try {
// System.out.println("创建名为test2.txt的新文件: " + file.createNewFile());
// } catch (IOException e) {
// // TODO 自动生成的 catch 块
// e.printStackTrace();
// }
//根据当前对象创建新⽬录
File file2 = new File(pathName);
System.out.println("创建新目录" + file2.mkdir());
}
}
}
什么是流:
流就是⼀组有序的数据序列,以先进先出的⽅式发送数据的通道。
Java中的流有很多种不同的分类:
- 按照⽅向分,可以分为输⼊流和输出流。 如何判断输⼊还是输出,站在Java程序⻆度,看数据是从外界来到Java中呢还是从Java中输出到外界,外届-Java 就是输⼊流, Java-外界 就是输出流。
- 按照单位分,可以分为字节流和字符流。 字节流指每次处理数据都是以字节为单位,字符流是指每次处理数据都是以字符为单位。
- 按照功能分,可以分为节点流和处理流。
字节流按照⽅向可以分为输⼊字节流(InputStream)和输出字节(OutputStream):
InputStream是java.io包中的顶层⽗类,实现了Closeable接⼝,该接⼝的作⽤是每次操作结束之后释放资源
InputStream常⽤的⽅法:
- public abstract int read() 以字节为单位读取⽂件中的数据
- public int read(byte b[]) 将数据存⼊byte类型的数组中,并返回数据的⻓度
- public int read(byte b[],int off,int len) 将数据存⼊byte类型的数组的指定区间中,并返回数据的⻓度
- public byte[] readAllBytes() 将数据存⼊byte类型的数组中,并返回该数组
- public int available() 返回当前数据中未读取的数据个数
- public void close() 关闭数据流
- 实际开发中不能直接实例化InputStream,因为它是⼀个抽象类,应该实例化其实现了抽象⽅法的⼦类, FileInputStream
- FileInputStream的实例化就相当于⼀根连接到某个⽂件的管道,通过该管道就可以把⽂件中的数据取出读取到Java程序中, FileInputStream只能连接⽂件,不能连接⽬录,否则会抛出FileNotFoundException。
- read()读取数据,每⼀此read()返回值就是⼀个字节的数据,如果取出的数据为-1,则表示该⽂件的所有的数据已经全部取出。
-
以字节为单位的输入流的框架图:
(01) InputStream 是以字节为单位的输入流的超类。InputStream提供了read()接口从输入流中读取字节数据。
(02) ByteArrayInputStream 是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
(03) PipedInputStream 是管道输入流,它和PipedOutputStream一起使用,能实现多线程间的管道通信。
(04) FilterInputStream 是过滤输入流。它是DataInputStream和BufferedInputStream的超类。
(05) DataInputStream 是数据输入流。它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
(06) BufferedInputStream 是缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
(07) File 是“文件”和“目录路径名”的抽象表示形式。关于File,注意两点:
a), File不仅仅只是表示文件,它也可以表示目录!
b), File虽然在io保重定义,但是它的超类是Object,而不是InputStream。
(08) FileDescriptor 是“文件描述符”。它可以被用来表示开放文件、开放套接字等。
(09) FileInputStream 是文件输入流。它通常用于对文件进行读取操作。
(10) ObjectInputStream 是对象输入流。它和ObjectOutputStream一起,用来提供对“基本数据或对象”的持久存储。
-
以字节为单位的输出流的框架图:
-
以字节为单位的输入流和输出流关联的框架图:
-
以字符为单位的输入流的框架图:
-
以字符为单位的输出流的框架图:
-
以字符为单位的输入流和输出流关联的框架图:
-
字节转换为字符流的框架图:
-
字节和字符的输入流对应关系:
-
字节和字符的输出流对应关系:
上一篇: 夏目友人帐 猫咪老师,超级可爱的卡通图片
下一篇: 兔子漫画大全 给生活加点料