JAVA中的那些流 你知道么

admin 2022年4月13日21:33:01评论18 views字数 12985阅读43分17秒阅读模式

字节输出流

FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(file file) 创建一个向指定file对象中写入数据的输出文件流
作用:
1.创建一个FileOutputStream对象
2.会根据构造方法中传递的文件文件路径 创建一个空的文件
3.会把FileOutputStream对象指定向创建好的文件
使用:
1.创建一个FileOutputStream对象,写入目的地
2.调用FileOutputStream对象中的方法,写入数据
3.释放资源
close() 关闭输出流释放资源
flush() 刷新内容
write(byte[] b) 把字节数组写入输出流
write(byt[] b,int off,int len) 从指定的字节数组邪恶如len字节,从偏移量off开始输出到此输出流
write(int b) 将指定的字节输出流

写单个字节

import java.io.FileOutputStream;
import java.io.IOException;

public class DemoFileOutputStream {
   public static void main(String[] args) throws IOException {
       FileOutputStream fos = new FileOutputStream("D:\Program Files\jichu\src\file\a.txt");
       fos.write(97);
       fos.close();
  }
}

写多个字节

package file;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class DuoFileOutputStream {
   public static void main(String[] args) throws IOException {

       FileOutputStream fos = new FileOutputStream("D:\Program Files\jichu\src\file\b.txt");
       // 字节数组
       byte[] bytes = {66,67,68,69,70};
       fos.write(bytes);

       // 字节数组 分割
       byte[] bytes1 = {65,66,67,68,69,70};
       // 从索引2开始 ,写为五个字节
       fos.write(bytes1,2,2);

       // 中文字符写入
       byte[] bytes2 = "你好".getBytes();
       System.out.println(Arrays.toString(bytes2)); //[-28, -67, -96, -27, -91, -67]
       fos.write(bytes2);

       fos.close();

  }
}

节追加写入 换行

true : 追加写入
flase:覆盖重写
package file;

import java.io.FileOutputStream;
import java.io.IOException;

public class Huanhang {
   public static void main(String[] args) throws IOException {
       FileOutputStream fos = new FileOutputStream("D:\Program Files\jichu\src\file\c.txt",true);
       for (int i = 0; i <10 ; i++) {
           fos.write("你好".getBytes());
           fos.write("rn".getBytes());
      }
       fos.close();
  }
}

字节输入流

读取字节

import java.io.FileInputStream;
import java.io.IOException;

public class DemoRead {
   public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("D:\Program Files\jichu\src\file\a.txt");
       int a = 0;
       while ((a = fis.read())!= -1){
           System.out.println((char)a);
      }
       fis.close();
  }
}
import java.io.FileInputStream;
import java.io.IOException;

public class Duoread {
   public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("D:\Program Files\jichu\src\file\a.txt");
       // 字符读取
       byte[] bytes = new byte[4];
       // 布尔表达式
       int len = 0;
       while ((len = fis.read(bytes))!=-1){
           System.out.println(new String(bytes));
      }
  }
}

文件复制

数据源:c:\1.jpg
目的地:c:\2.jpg
 
创建字节输入流,读取图片
创建字节输出流,写入图片
字节输入流,读取文件
字节输出流,写入文件
关闭资源
package file;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFile {
   public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("D:\1.jpg");
       FileOutputStream fos = new FileOutputStream("D:\2.jpg");
       // 第一种
       //int len = 0;
       //while ((len = fis.read())!=-1){
       //   fos.write(len);
       //}

       // 第二种
       byte[] bytes = new byte[1024];
       int a = 0;
       while ((a = fis.read(bytes))!=-1){
           fos.write(bytes,0,a);
      }

       fos.close();
       fis.close();
  }
}
GBK: 两个字节
UTF-8: 三个字节
字节流读取文件 中文字符 导致乱码 故引用字符输入流

字符输入流

字符出入流,是字符输入流的顶层父类,定义一些共性成员方法,一个抽象类
read() 读取单个字符并返回
read(char[] cbuf) 读取多个字符 并返回数组
close() 关闭资源
package file;

import java.io.FileReader;
import java.io.IOException;

public class ZiFuRead {
   public static void main(String[] args) throws IOException {
       FileReader fr = new FileReader("D:\Program Files\jichu\src\file\c.txt");
       // 第一种方法 单个读取
//       int len = 0;
//       while ((len = fr.read())!= -1){
//           System.out.println((char)len);
//       }

       // 第二种方法 字符数组
       char[] chars = new char[4];
       int ch = 0;
       while ((ch = fr.read(chars))!=-1){
           System.out.println(new String(chars));
      }
       fr.close();
  }
}

字符输出流

write(int c) 写入单个字符
write(char[] char) 写入字符数组
write(char[] char,int off,int len) 写入字符某一部分,从索引n开始,写入n个字符
write(String str) 写入字符串
write(String str,int off,int len) 写入字符串某一部分,从索引n开始,写入n个字符
flush() 刷新缓冲
close() 关闭资源
package file;

import java.io.FileWriter;
import java.io.IOException;

public class DuoWrite {
   public static void main(String[] args) throws IOException {
       FileWriter fw = new FileWriter("D:\Program Files\jichu\src\file\d.txt");
       fw.write("abc");
       fw.write("你好");
       fw.write(97);
       char[] bytes = {96,97,99};
       fw.write(bytes);

       fw.flush();
       fw.close();
  }
}

追加换行写入

package file;

import java.io.FileWriter;
import java.io.IOException;

public class HuanhangWriter {
   public static void main(String[] args) throws IOException {
       // true 追加写入
       // false 覆盖重写
       FileWriter fw = new FileWriter("D:\Program Files\jichu\src\file\f.txt",true);
       fw.write("test, 你好");
       fw.write("rn");
       fw.write("heihie");

       fw.close();
  }
}

属性集合

properties 表示一个持久性的属性集,可保存在流中或从流中加载
可以使用store 把集合中的临时数据 持久化写入到硬盘中
可以使用load ,把硬盘中保存的文件,读取到集合中使用
properties 是一个双列集合 key 和value 都是字符串 默认
setProperty(String key,String value) 写数据
getProperty(String key) 读数据 指定key 读value
stringPropertyNames() 返回此属性集列表中的键集,相当于map中的keyset方法
package file;

import java.util.Properties;
import java.util.Set;

public class DemoProperties {
   public static void main(String[] args) {
       // 创建属性集
       Properties p = new Properties();
       // 添加数据
       p.setProperty("张三","166");
       p.setProperty("李四","176");
       p.setProperty("王五","186");

       // 获取key 存储到集合里
       Set<String> s = p.stringPropertyNames();
       // 遍历集合 获取key值
       for (String key : s) {
           // 通过key 获取value
           String value = p.getProperty(key);
           System.out.println(key +"---"+ value);
      }
  }
}

store写入文件

package file;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class DemoProperties {
   public static void main(String[] args) throws IOException {
       // 创建属性集
       Properties p = new Properties();
       // 添加数据
       p.setProperty("张三","166");
       p.setProperty("李四","176");
       p.setProperty("王五","186");

       // 创建字符写入流
       FileWriter fw = new FileWriter("D:\Program Files\jichu\src\file\properties.txt");

       // 使用store写入数据到文件
       p.store(fw,"save data");

       // 关闭资源
       fw.close();

  }
}

load读取文件

package file;

import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class DemoProperties {
   public static void main(String[] args) throws IOException {
       // 创建属性集
       Properties p = new Properties();
       // 使用load 读取文件
       p.load(new FileReader("D:\Program Files\jichu\src\file\properties.txt"));

       // 获取key 存储set集合
       Set<String> set = p.stringPropertyNames();

       // 遍历数据
       for (String key : set) {
           String value = p.getProperty(key);
           System.out.println(key +"----"+value);
      }

  }
}

缓冲流

缓冲流 也叫高效流
字节缓冲流 BufferedInputStream BufferedOutputStream
字符缓冲流 BufferedReader BufferedWriter
缓冲流的基原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统ID次数,从而提高读写的效率。

节流

BufferedInputStream() 创建一个新的缓冲输入流
BufferedOutputStream() 创建一个新的缓冲输出流
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DemoBufferedOutputStream {
   public static void main(String[] args) throws IOException {
       FileOutputStream fs = new FileOutputStream("D:\Program Files\jichu\src\file\e.txt");
       BufferedOutputStream bs = new BufferedOutputStream(fs);
       bs.write("你好".getBytes());
       bs.close();

  }
}
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class DemoBufferedOutputStream {
   public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("D:\program Files\jichu\src\file\e.txt");
       BufferedInputStream bis = new BufferedInputStream(fis);
       int len = 0;
       while ((len = bis.read())!=-1){
           System.out.println(len);
      }
       bis.close();
  }
}

文件复制

package file;

import java.io.*;

public class DemoBufferedOutputStream {
   public static void main(String[] args) throws IOException {
       long s = System.currentTimeMillis();
       // C:Users20185Desktop1.jpg
       BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\Users\20185\Desktop\1.jpg"));
       // C:Users20185Desktop2.jpg
       BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\Users\20185\Desktop\2.jpg"));
       byte[] bytes = new byte[1024];
       int len = 0;
       while ((len = bis.read(bytes))!=-1){
           bos.write(bytes,0,len);
      }
       bos.close();
       bis.close();
       long e = System.currentTimeMillis();
       System.out.println("共花费"+(e-s)+"毫秒");
  }
}

字符缓冲流

写文件

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class DemoBufferedWirte {
   public static void main(String[] args) throws IOException {
       FileWriter fw = new FileWriter("D:\Program Files\jichu\src\file\g.txt");
       BufferedWriter bw = new BufferedWriter(fw);
       bw.write("你好");
       bw.newLine();
       bw.write("世界");
       bw.close();
  }
}

读文件

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class DemoBufferedWirte {
   public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new FileReader("D:\Program Files\jichu\src\file\g.txt"));
       // 获取内容 一行输出
//       String s = br.readLine();
//       System.out.println(s);
       // 定义一个空字符
       String len ="";
       // 当字符不为null 循环打印
       while ((len = br.readLine())!=null){
           System.out.println(len);
      }
       br.close();
  }
}

文本内容排序


3.老虎没打到
4.打到小松鼠
2.上山打老虎
1.一二三四五

package file;

import java.io.*;
import java.util.HashMap;

public class DemoBufferedWirte {
   public static void main(String[] args) throws IOException {
       // 定义一个集合 存储键值
       HashMap<String,String> map = new HashMap<>();
       // 读文件
       BufferedReader br = new BufferedReader(new FileReader("D:\Program Files\jichu\src\file\g.txt"));
       // 写文件
       BufferedWriter bw = new BufferedWriter(new FileWriter("D:\Program Files\jichu\src\file\out.txt"));
       // 读行文字
       String line ="";
       while ((line = br.readLine())!=null){
           // . 分割内容 存储到集合里
           String[] array = line.split("\.");
           map.put(array[0],array[1]);
      }
       // 遍历集合 取key 和 value 重新组合
       for (String key : map.keySet()) {
           String vaule = map.get(key);
           line = key +"."+vaule;
           bw.write(line);
           bw.newLine();
      }
       bw.close();
       br.close();
  }
}


1.一二三四五
2.上山打老虎
3.老虎没打到
4.打到小松鼠

转换流

OutputStreamWrite()  写文件
InputStreatRead() 读文件

写文件

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class DemoOutputStreamWrite {
   public static void main(String[] args) throws IOException {
       OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\Program Files\jichu\src\file\a.txt"),"gbk");
       osw.write("你好");
       osw.close();
  }
}

读文件

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class DemoOutputStreamWrite {
   public static void main(String[] args) throws IOException {
       InputStreamReader isr =new InputStreamReader(new FileInputStream("D:\Program Files\jichu\src\file\a.txt"),"gbk");
       int len = 0;
       while ((len = isr.read())!=-1){
           System.out.println((char)len);
      }
       isr.close();
  }

文件类型转换

gbk 转 utf-8

import java.io.*;

public class DemoOutputStreamWrite {
   public static void main(String[] args) throws IOException {
       // gbk 格式读取文件
       InputStreamReader isr =new InputStreamReader(new FileInputStream("D:\Program Files\jichu\src\file\a.txt"),"gbk");
       // utf-8 格式 保存文件
       OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\Program Files\jichu\src\file\a1.txt"),"utf-8");
       // 读文件 二写入 utf-8的格式
       int len = 0;
       while ((len = isr.read())!=-1){
           osw.write(len);
      }
       osw.close();
       isr.close();
  }

序列化流

ObjectOutputStream() 写文件
ObjectInputStream() 读文件

特有方法:
writeObject() 写文件
readObjet() 读文件

写文件

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class DemoObjectOutputStream {
   public static void main(String[] args) throws IOException {
       ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\Program Files\jichu\src\file\a.txt"));
       oos.writeObject("test");
       oos.close();
  }
}

读文件

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DemoObjectOutputStream {
   public static void main(String[] args) throws IOException, ClassNotFoundException {
       ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\Program Files\jichu\src\file\a.txt"));
       Object o = ois.readObject();
       System.out.println(o);
       ois.close();
  }
}

序列化练习

package file;

import java.io.Serializable;

public class Persin implements Serializable {
   private String name;
   private int age;

   public Persin(){}


   public Persin(String name, int age) {
       this.name = name;
       this.age = age;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public int getAge() {
       return age;
  }

   public void setAge(int age) {
       this.age = age;
  }

   @Override
   public String toString() {
       return "Persin{" +
               "name='" + name + ''' +
               ", age=" + age +
               '}';
  }
}


package file;

import java.io.*;
import java.util.ArrayList;

public class DemoObjectOutputStream {
   public static void main(String[] args) throws IOException, ClassNotFoundException {
       ArrayList<Persin> list = new ArrayList<>();
       list.add(new Persin("张三",18));
       list.add(new Persin("李四",19));
       list.add(new Persin("王五",20));

       ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\Program Files\jichu\src\file\a.txt"));
       oos.writeObject(list);

       ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\Program Files\jichu\src\file\a.txt"));
       Object o = ois.readObject();

       ArrayList<Persin> list1 = (ArrayList<Persin>) o;
       for (Persin p : list1) {
           System.out.println(p);
      }
       ois.close();
       oos.close();
  }
}


打印流

PrintStream() 创建文件
import java.io.*;

public class DemoOutputStreamWrite {
   public static void main(String[] args) throws IOException {
       PrintStream ps = new PrintStream("D:\Program Files\jichu\src\file\a.txt");
       ps.println("aaa");
       ps.println(97);
       ps.print("test");

       ps.close();
  }
}



原文始发于微信公众号(轩公子谈技术):JAVA中的那些流 你知道么

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月13日21:33:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JAVA中的那些流 你知道么http://cn-sec.com/archives/907069.html

发表评论

匿名网友 填写信息