java IO
Java IO是一套用来提供读写的API。大部分程序都要处理一些输入,并由输入产生一些输出。java为此提供了java.io包。
java IO包主要涉及文件、网络数据流、内存缓冲等的输入输出。
流
在JavaIO中流是一个核心概念。流是一个抽象概念,可以看做数据传递时一组连续的数据流。
输入流:数据从数据源(文件、数据库、网络)流向程序的过程。输入流也可以理解为向内存输入。
输出流:数据从程序流向目的地(文件、数据库)的过程称为输出流。输出流可以理解为从内存输出。
一个程序需要用InputStream或者reader从数据源读取数据,通过OutputStream或者writer将数据写入目标中。
在java io中流既可以是字节流(以字节为单位进行读写)也可以是字符流(以字符单位进行读写)。
下面介绍一下常用的文件读写的使用。
文件的读写
可以根据读取文件是否二进制文件来选择使用FileInputStream(字节流)还是Reader(字符流)。读取文本数据优先选择字符流。
//字符流进行读取 Reader reader=new FileReader(new File("D://out.data")); BufferedReader br=new BufferedReader(reader); String data=null; while ((data=br.readLine())!=null){ System.out.println(data); } br.close();
//写入 Writer wr=new FileWriter(new File("D://out.data")); BufferedWriter bw=new BufferedWriter(wr); bw.write("窗前明月光"); bw.newLine(); bw.write("疑是地上霜"); bw.close();
//字节流读取 InputStream is=new FileInputStream(new File("D://docker安装.txt")); byte data[]=new byte[1024]; int len; StringBuilder sb=new StringBuilder(); //is.read(byte [])将读取到的字节写入byte数组中,返回写入的长度 while((len=is.read(data))!=-1){ String s=new String(data,0,len); sb.append(s); } System.out.println(sb);
//字节流输出 true为追加写,false为覆盖写 OutputStream os=new FileOutputStream(new File("D://out.data"),true); String data="\n举头望明月"; os.write(data.getBytes(Charset.defaultCharset())); os.flush(); os.close();