文件和IO流基础入门(简述)

文件和IO流基础入门(简述)

什么是文件

在Java的学习中,文件和IO流是一个十分重要的板块。在Java中,File是文件和目录路径名的抽象表示。文件和目录可以通过File封装成对象。对File而言,其封装的并不是一个真正存在的文件,仅仅只是一个路径名而已,他可以是存在的也可以是不存在的。将来是要通过具体操作把这个路径的内容转化为具体存在的。

什么是IO流

IO是指input和output,也就是输入/输出,流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输。IO流就是用来处理设备间数据传输问题。其常见的应用:文件复制、文件上传、文件下载。

对文件及其操作的简单叙述

文件及对文件的操作可以说是实现IO流操作的前提和基础,没有文件也就不能对其操作,本篇博客的重点是IO流,所以对文件我们就简单带过。

首先说文件的构造方法:
File(String pathname)
通过将给定的路径名字富川转换为抽象路径名来创建新的File实例
File(String parent,String child)
从父路径名字符串和子路径字符串创建新的File实例
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的File实例

其次是文件的方法:

​ 创建文件

	File file = new File("D:\\hello.txt");
	file.createNewFile()

​ 创建单级路径

	File file1=new File("D:\\javaee");
	file1.mkdir()

​ 创建多级路径

	File file2=new File("D:\\javaee\\helloWorld\\test");
	file2.mkdirs()
文件的遍历:

在实现文件的遍历之前,要知道两个方法:

1、listFiles();列出该路径下的所有文件

2、isDirection();判断此路径是否是目录

其次要用到递归的思想,通过自己内部调用自己方式来实现查询多级目录,在这里要注意,如果使用递归创建文件夹一定要先做好出口!(此处鞭尸狗鑫)

public class traverseCatalog {
    public static void main(String[] args) throws IOException {
        File f1=new File("D:\\itHeima");
        System.out.println(f1.mkdir());
        File f2=new File("D:\\itHeima\\helloWorld.txt");
        System.out.println(f2.createNewFile());
        File f3=new File("D:\\itHeima\\helloWorld1.txt");
        System.out.println(f3.createNewFile());
        File f4=new File("D:\\itHeima\\helloWorld2.txt");
        System.out.println(f4.createNewFile());
        File f5=new File("D:\\itHeima\\helloWorld3.txt");
        System.out.println(f5.createNewFile());
        traverseCatalog(f1);
}
public static void traverseCatalog(File f1){
    File[] fileArray=f1.listFiles();    //listFiles方法是列出该路径下的所有文件
    if (fileArray !=null){
        for (File file : fileArray) {
            if (file.isDirectory()){    //判断此路径是否是目录
                traverseCatalog(file);
            }else System.out.println(file.getAbsoluteFile());
        }
    }
}

IO流概述及其操作:

分类
按照数据的流向来分

输入流:读数据,从硬盘到读取数据到内存。
输出流:写数据,从内存到写数据到硬盘。

按照数据类型来分(常用)

分为字节流和字符流,其区别是编码方式不同。字节流处理单元是一个Unicode字符,而字符流处理单元是两个Unicode字符,所以在采用不同的方式编解码的时候可能会产生不同的结果,这一点需要注意。

字节流的具体实现和构造方法

字节流有字节输入流InputStream和字节输出流OutputStream其两者又有FileIn/outputStream和BufferedIn/OutputStream,分别是字节输入输出流和字节缓冲输入输出流,对比而言字节缓冲流的效率更高,在字节流的使用中也是最多的。

字节缓冲输出流:
BufferOutStream(OutputStream out)
字节缓冲输入流:
BufferInputStream(InputStream in)
字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作。
例:BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(“D:\itHeima\movie.avi”));

字符流出现及其应用

当出现汉字时,字节流会出现乱码,因为汉字的存储如果是GBK编码,占用两个字节,如果是UTF-8编码,占用3个字节
汉字出现的形式,汉字无论在那种编码方式中,都是负数开头,字符流的底层是字节流加编码表

字符串中的编码解码问题

编码
byte[] getBytes():使用平台默认字符集将该String编码为一系列字节,将结果存储到信道字节数组中
byte[] getBytes(String charsetName):使用指定的字符集将该String编码为一些列字节,将结果存储到新的字节数组中
例byte[] bys =s.getBytes(“UTF-8”);
解码
String(byte[] bytes):通过使用平台默认的字符集解码指定的字节数组来构造新的String
String(byte[] bytes,String charsetName):通过指定的字符集解码指定的字节数组来构造新的String
例String ss=new String(bys,“GBK”);

字符流中的编码解码问题
字符流抽象基类

​ Reader:字符输入流的抽象类
​ Writer:字符输出流的抽象类

构造方法

​ 全名
​ InputStreamReader isr=new InputStreamReader(new FileInputStream(“D:\itHeima\my.txt”));//字符输入流
​ OutputStreamWriter osw1=new OutputStreamWriter(new FileOutputStream(“D:\itHeima\my1.txt”));//字符输出流
​ 子类
​ FileReader fr=new FileReader(“D:\itHeima\my.txt”);//字符输入流
​ FileWriter fw=new FileWriter(“D:\itHeima\my1.txt”);//字符输出流
​ 方法

字符流写数据的5种方式

​ 写一个字符void write (int c);//整形的数据会自动转化成整形对应的ASCII码
​ 写入一个字符数组void write(char[] cbud);//字符流的数组是char[]
​ 写入字符数组的一部分void write (char[] dbuf,int off,int len);
​ 写一个字符串void write(String str);
​ 写一个字符串的一部分void write(String str,int off ,int len);

字符流的刷新流

​ 字符流只有接收到一个字符数据的时候才会将数据写入,当少于一个字符时会写入缓冲区等待数据完整后再写入,这个时候就需要用到字符刷新流,将不足的数据也从缓冲区输出出来
​ osw.flush();//如果没有手动调用flash但是调用了close方法,也会自动调用flush方法

字符缓冲流
构造方法

​ BufferedWriter bw=new BufferedWriter(new FileWriter(“D:\itHeima\my1.txt”));
​ BufferedReader br=new BufferedReader(new FileReader(“D:\itHeima\my.txt”));

读写方法

​ 和字节缓冲流一致,但只能读写文件不能读写视频和图片

特有功能

​ BufferedWriter:
​ void newLine();//写一个行分隔符,行分隔符字符串由系统属性定义
​ BufferedReader:
​ public String readLine();//读一行文字。结果包含行的内容的字符串,不包括任何行终止字符,如果流的结尾已经到达,则为null

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值