java中的文件流, 转换流

文件流对象

file

File f = new File();

字节输出流

 FileOutputStream fos = new FileOutputStream(file);

文件输入流

 FileInputStream fos = new FileInputStream(file);
		// 文件fos.txt必须存在
        FileInputStream is = new FileInputStream("fos.txt");
        int len ;
        byte[] b = new byte[2];
        while ((len = is.read(b))!=-1){
            System.out.println(new String(b,0,len));
        }
        is.close();

字符输入流

        FileReader fr = new FileReader("fos.txt");
        // 定义变量,保存数据
        int b;
        char[] ch= new char[1024];
        // 循环读取
        while ((b = fr.read(ch))!=-1) {
            System.out.println(ch);
        }
        // 关闭资源
        fr.close();

字符输出流

       // 使用文件名称创建流对象
        FileWriter fw = new FileWriter("fos.txt");
        // 写出数据
        fw.write(97);
        fw.write('b'); 
        fw.write('C');
        fw.write(30000);
      	/*
        【注意】关闭资源时,与FileOutputStream不同。
      	 如果不关闭,数据只是保存到缓冲区数组,并未保存到文件。
        */
         fw.close();

文件拷贝

        //一次读写一个字符的拷贝
        FileReader fr = new FileReader("fos.txt");
        //没有文件创建,输出流内置数组
        FileWriter fw = new FileWriter("foi.txt");
        int ch;
        char[] arr = new char[2];
        while ((ch=fr.read(arr))!=-1) {
            System.out.print((char)ch);//你好你好啊
            fw.write(arr,0,ch);
        }
        fr.close();
        fw.close();//关闭,刷新,数组,文件

缓冲流

  • 字节缓冲流BufferedInputStreamBufferedOutputStream
  • 字符缓冲流BufferedReaderBufferedWriter
  // 记录开始时间
        long start = System.currentTimeMillis();
        // 创建流对象
        try (
         BufferedInputStream bis = new BufferedInputStream(new FileInputStream("jdk-6u45-windows-x64.exe"));
         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("cope.exe"));){
            // 读写数据
            int b;
            while ((b = bis.read()) != -1) {
                bos.write(b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 记录结束时间
        long end = System.currentTimeMillis();
        System.out.println("缓冲流复制时间:"+(end - start)+" 毫秒");

字符缓冲流

  • public BufferedReader(Reader in) :创建一个 新的缓冲输入流。
  • public BufferedWriter(Writer out): 创建一个新的缓冲输出流。
 // 创建map集合,保存文本数据,键为序号,值为文字
       HashMap<String, String> lineMap = new HashMap<>();
       // 创建流对象
       BufferedReader br = new BufferedReader(new FileReader("in.txt"));
       BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"));
       // 读取数据
       String line  = null;
       while ((line = br.readLine())!=null) {
           // 解析文本
           String[] split = line.split("\\.");//注意切割的是正则表达式,表示点要用\\.而不是任意字符.
           // 保存到集合
           lineMap.put(split[0],split[1]);
       }
       // 释放资源
       br.close();
       // 遍历map集合,用普通for循环!!!,这里巧妙利用的文本的行号1,2等,从而不用对集合的键进行排序
       for (int i = 1; i <= lineMap.size(); i++) {//i,对应的是行号,即排好序的键
           String key = String.valueOf(i);//把数字变成字符串,如1变成"1",看不惯你用+号拼接也可
           // 获取map中文本
           String value = lineMap.get(key);
           // 写出拼接文本
           bw.write(key+"."+value);
           // 写出换行
           bw.newLine();
       }
       // 释放资源
       bw.close();

转换流
字节输入流

  • InputStreamReader(InputStream in): 创建一个使用默认字符集的字符输入流。 字节流到字符流的桥梁
  • InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符输入流。
  • 字节输出流
  • OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符输出流。 ,字符流到字节流的桥梁
  • OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符输出流。
       // 必须要知道其文件的编码形式
        InputStreamReader is = new InputStreamReader(new FileInputStream("new-charset.txt"),"GBK");
        OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("charset.txt"));
        int b;
        while ((b = is.read()) != -1) {
            System.out.println((char)b);
            os.write(b);
        }
        os.flush();
        os.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值