Java学习之IO

两种分类

  • 按流向分类
    • 输入流:数据源到程序(InputStream、Reader)
    • 输出流:程序到目的地(OutputStream、Writer)
  • 按功能分类
    • 节点流:直接从数据源或目的地读写数据,IO操作第一线,必须经过
    • 处理流:不直接连接数据源或目的地,对其他流进行封装,提高性能或简化操作

第一个程序

//1、创建源,路径分割符使用'/'
File srcFile = new File("D:/abc.txt");
//2、选择流
InputStream is = new FileInputStream(srcFile);
//3、操作(读取)
int data1 = is.read();//不存在返回-1
//4、释放资源
is.close();	

四大抽象类

节点流

处理流

  • 缓冲流
    • 字节输入缓冲流:BufferedInputStream(InputStream in)
    • 字节输出缓冲流:BufferedOutputStream(OutputStream out)
    • 字符输入缓冲流:String readLine() 读取一行
    • 字符输出缓冲流:void newLine() 换行,与write方法搭配逐行读取
  • 转换流
/将字节流转换成字符流,指定字符集
InputStreamReader isr = new InputStreamReader(System.in,"gbk");
//使用缓存字符流来进行读写,效率高
br = new BufferedReader(isr);
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/abc.txt"),"gbk"));
//开始读写
String line =null;//用于存储读到的字符串
while(!"exit".equals(line=br.readLine())) {
	bw.write(line);
	bw.newLine();
	bw.flush();
}
  • 数据流
    提供了可以存取所有基本数据类型和String的方法,针对字节流且是二进制的文件,写出后读取,读取顺序与写出一致
    • DataOutputStream(OutputStream out):void writeUTF(String str);void writeInt(int v);
    • DataInputStream(InputStream in):String readUTF();int readInt();
  • 打印流
    • PrintStream(OutputStream out, boolean autoFlush):PrintStream ps = System.out;
    • PrintWriter(OutputStream out, boolean autoFlush):自动刷新
  • 随机访问
    RandomAccessFile(File file, String mode)
    • mode:"r"读,"rw"写
    • seek(long pos):文件指针偏移量
  • 序列流
    SequenceInputStream(Enumeration<? extends InputStream> e)
Vector<InputStream> vi = new Vector<InputStream>();
for(int i=0;i<size;i++) {
	vi.add(new BufferedInputStream(new FileInputStream(destPaths.get(i))));
}
SequenceInputStream sis = new SequenceInputStream(vi.elements());

释放资源

  • 集中释放
public static void close(Closeable... ios) {
  for(Closeable io:ios) {
    try {
	if(null!=io) {
	    io.close();
	}
    } catch (IOException e) {
	e.printStackTrace();
    }
  }
}
  • try-with-source
try(InputStream is = isr;OutputStream oStream=os) {
  //在try后括号内定义的流可关闭,语法糖,编译后自动加上关闭代码
} catch (FileNotFoundException e) {
	e.printStackTrace();
}
posted @ 2022-03-21 00:42  Chen-Jane  阅读(38)  评论(0)    收藏  举报