File&IO流

目录

File类的方法

File的遍历

字符集

        编码种类

        java的编码

        java的解码

        java编码,解码实例

IO流认识

 IO总体有四大流:

文件字节输入流

    文件的读取方法

        创建字节输入流管道与源文件接通

          读取文件

   文件的读取实例

每次读取一个字节

每次读取多个字节

读取所有字节--可避免乱码

文件字节输出流

构造器--创建输出流 

方法名称--输出字节

代码演示

字节流应用--文件复制

字符输入流

构造器--创建输入流

方法名称

代码实例

字符输出流

构造器--创建输出流

方法名称

代码实例

关闭流/刷新流


File类的方法

File的遍历

  1.  找出盘中所有的一级文件对象
  2. 遍历一级文件对象,判读是否为文件
  3. if 是文件,判断是否是目标文件
  4. if 不是,则遍历该文件夹,重复上述过程
    
    public class fileText006 {
        public static void main(String[] args) {
    //		‪D:\text\递归遍历\
            ScreamFile(new File("D:"), "me.txt");
        }
    
    
        public static void ScreamFile(File f, String fileName) {//文件所在的区域,查找的文件名
            //输入的file为空,路径错误,为文件夹 // || 有一个为true
            if (f == null || !f.exists() || f.isFile()) {
                return;        //返回空
            }
            //排除错误后遍历文件夹
            File[] files = f.listFiles();
            //判断是否存在一级文件,且能拿到一级文件 //&&所有都为true
            if (files != null&&files.length > 0) {
                for (File file : files) {
                    //file为文件,直接对比目标文件
                    if (file.isFile()) {
                        //获取文件名称,并于目标文件对比
                        if (file.getName().contains(fileName)) {
                            System.out.println("目标文件的路径为" + file.getAbsolutePath());
                        }
                    } else {
                        //file为文件夹
                        ScreamFile(file, fileName);
    
                    }
                }
    
            }
        }
    }

    用到递归算法,||满足其一即可,&&所有条件都要满足

字符集

        编码种类

  1. ASCII 1个字节,8位
  2. GBK 2个字节,16位
  3. UTF-8 汉字占三个字节,英文/数字占一个字节.兼容ASCII编码

        java的编码

get Bytes()使用平台默认的编码方式

get Byte(String str)指定编码方式

        java的解码

String(byte[] bytes) 使用平台默认的解码方式

String(byte[] bytes,String str) 使用指定的解码方式

        java编码,解码实例

public class fileText008 {
	public static void main(String[] args) throws Exception {
		//编码
		String data="糯米香香";
		byte[] b = data.getBytes();
		//解码
		String s = new String(b);
		System.out.println(s);
	}
}

IO流认识

 按流的方向分为:输入流,输出流

按流的单位分为:字节流(所有文件类型),字符流(纯文本文件)

 IO总体有四大流:

  1. 字节输入流---InputStream----FileInputStream
  2. 字节输出流---OutputStream---FileOutputStream
  3. 字符输入流---Reader---FileReader
  4. 字符输出流---Winter---FileWriter

哦,都是抽象类--实现类

文件字节输入流

        把磁盘中文件的数据以byte的形式读到内存中

    文件的读取方法

        创建字节输入流管道与源文件接通

        public fileInputStream(File file)

        public fileInputStream(String pathName)

          读取文件

        public int read();每次读取返回一个字节

   文件的读取实例

每次读取一个字节

public class ioText {
    public static void main(String[] args) throws IOException {
        //1.源文件与程序创建字节输入流管道接通,括号内输入源文件路径,类会把路径包装成File
        InputStream io = new FileInputStream("src\\bh");//多态,左抽象类,右实现类
//        2.读取字节
//        public int read();每次读取一个字节返回
        int i = io.read();
        System.out.println((char)i);
        int i1 = io.read();
        System.out.println((char)i1);
        int i2 = io.read();
        System.out.println((char)i2);

    }
}

每次读取多个字节

public class ioText002 {
    public static void main(String[] args) throws IOException {
        //1.源文件与程序创建字节输入流管道接通,括号内输入源文件路径,类会把路径包装成File
        InputStream io = new FileInputStream("src\\bh");//多态,左抽象类,右实现类
//        2.1读取字节
        byte[] butten = new byte[3];//桶,一次读取3个字节--编码
//        读取
        int len = io.read(butten);
        String s = new String(butten);//解码
        System.out.println(s);
        System.out.println(len);
        int len2 = io.read(butten);
//      butten=[n2l]
//      butten=[hhl]
        String s1 = new String(butten,0,len2);//解码--读多少,取多少
        System.out.println(s1);
        System.out.println(len2);
 //2.2循环读取
        int len;//统计读取的长度
        byte[] b = new byte[3];//一次读取的字节长度
        while((len=io.read(b))!=-1){
            String s = new String(b,0,len);
            System.out.print(s);
            System.out.println(len);

        }
//        最后一步,释放输入流管道
        io.close();
    }
}

读取所有字节--可避免乱码

  1. 法一:获取文件长度,传入字节数组中,获取文件信息
  2. 法二:用readAllBytes()直接获取,返回值为字节数组
//法一
    public class ioText004 {
	public static void main(String[] args) throws IOException {
		//创建连接
		InputStream is = new FileInputStream("src\\bh");
		//获取文件长度
		File file = new File("src\\bh");
		byte[] bytes = new byte[(int) file.length()];//字节数组的长度与文件长度相等
		//获取文件字节信息
		int len = is.read(bytes);
    //	解码
    	String s = new String(bytes);
		System.out.println(s);
		System.out.println(len);//获取的文件长度
		System.out.println(file.length());//文件长度
	    }
    }
//法二
public class ioText005 {
	public static void main(String[] args) throws IOException {
		//创建连接
		InputStream is = new FileInputStream("src\\bh");
		byte[] bytes = is.readAllBytes();
		String s = new String(bytes);
		System.out.println(s);
	}
}

文件字节输出流

构造器--创建输出流 

FileOutputStream(String filepath)与源文件路径接通,每次运行会覆盖文档数据

FileOutputStream(String filepath,Boolean append)与源文件路径接通,可追加数据

方法名称--输出字节

write(int a)写一个字节出去

write(byte[] bytes)写一个字节数组出去

write(byte[] bytes ,int pos ,int len)写字节的一部分出去

代码演示

public class ioText006 {
	public static void main(String[] args) throws Exception {
		//创建文件并连接输入流
		OutputStream os = new FileOutputStream("src\\text001.txt",true);
		os.write(96);
		os.write('b');
		byte[] bytes = "嘎嘎嘎嘎".getBytes();
		os.write(bytes,0,12);
		os.close();//关闭输入流
	}
}

字节流应用--文件复制

public class ioText007 {
    public static void main(String[] args) throws Exception {
        //输入流
        InputStream is = new FileInputStream("src\\text001.txt");
        //输出流
        OutputStream os = new FileOutputStream("src\\text001copy.txt");
//        创建一个字节数组,负责转移字节数据
        byte[] bytes = new byte[2];
        int len;
        while((len = is.read(bytes))!=-1){
            //输出字节
            os.write(bytes);
        }
        //释放字节
        os.close();
        is.close();
    }
}

字符输入流

构造器--创建输入流

FileReader(String pathName) 创建字节输入流管道与源文件接通

方法名称

read() 每次读取一个字符,没有数据会返回-1

read(char[] chars)每次读取多个字符

代码实例

通过字符数组来获取数据!!!!!!!

public class ioText008 {
	public static void main(String[] args) throws Exception {
		//创建输入流
			Reader fr = new FileReader("src\\text001.txt");
//			获取文件
//			字符输入流通过字符读,字节输入流通过字节读
			char[] chars = new char[3];
			while((fr.read(chars))!=-1){
				System.out.print(chars);
			}
	}
}

字符输出流

实现换行"\r\n"

构造器--创建输出流

FileWriter(String filepath) 创建字符输出流管道与源文件接通

FileWriter(String filepath,Boolean append)创建字符输出流管道与源文件接通,可追加数据

方法名称

write(int c)                                     写一个字符

write(String str)                             写一个字符串

write(String str,int off,int len)        写一个字符串的一部分

write(char[] cbuf)                          写一个字符数组

write(char[] cbuf,int off,int len)      写一个字符数组的一部分

代码实例


public class ioText009 {
	public static void main(String[] args) throws Exception {
		//创建输出流
		Writer fw = new FileWriter("src/text002.txt");
	    //传入数据
		fw.write(97);//传入int
		fw.write('a');//传入字符
		fw.write("\r\n");
		fw.write("糯米香香",0,1);//传入字符串
		//传入字符数组
	    char[] ch={'我','要','早','睡'};
    	fw.write(ch);
	    fw.close();

	}
}

关闭流/刷新流

程序执行时,输出的数据会先存到内存中,遇到关闭流/刷新流后才会写入到文件中

flush()        属性流

close()        关闭流,关闭操作,包含刷新

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值