数据流向某个对象的数据序列,并且到达这个对象的过程。
输入流:数据源数据向计算机内存的过程。
输出流:把数据从程序流向目标数据源的过程。
字节流:以字节为数据单位来处理的流。
流的父类 :
输入流:InputStream(字节输入流)和Reader(字符输入流)为基类
输出流:OutputStream(字节输出流)和Writer(字符输出流)为基类
//磁盘路径两种表示方式: // 1: \\ 2: / try { //从文件地址中读取内容到程序中 InputStream is = new FileInputStream("D:/IOFile/Ch02.txt"); //开始读取信息 //先定义一个字节数组存放数据 byte[] b = new byte[5]; //声明一个int存储每次读取到的数据 int i=0; //定义一个 记录索引的变量 int index = 0; //循环读取每个数据 while((i=is.read())!=-1){ b[index]=(byte)i; index++; } //如何把字节数组转成字符串 System.out.println(new String(b)); //关闭流 is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block //文件没有找到异常 e.printStackTrace(); } catch (IOException e) { //文件读写异常 // TODO Auto-generated catch block e.printStackTrace(); } }
//磁盘路径两种表示方式: // 1: \\ 2: / try { //从文件地址中读取内容到程序中 InputStream is = new FileInputStream("D:/IOFile/Ch02.txt"); //开始读取信息 //先定义一个字节数组存放数据 byte[] b = new byte[5]; //完整的读取一个文件 is.read(b); //read返回读取的文件大小 //最大不超过b.length,实际读取以文件大小为准 //打印的字节 System.out.println(Arrays.toString(b)); //如何把字节数组转成字符串 System.out.println(new String(b)); // while(is.read(b)!=-1){ // // } //关闭流 is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block //文件没有找到异常 e.printStackTrace(); } catch (IOException e) { //文件读写异常 // TODO Auto-generated catch block e.printStackTrace(); } }
public static void main(String[] args){ //磁盘路径两种表示方式: // 1: \\ 2: / try { //从文件地址中读取内容到程序中 InputStream is = new FileInputStream("D:/IOFile/Ch02.txt"); //开始读取信息 //先定义一个字节数组存放数据 byte[] b = new byte[8]; //完整的读取一个文件 int off=0; byte [] c=new byte[is.available()]; //返回文件的大小 while(is.read(b,off,2)!=-1){ off+=2; // System.out.println(off); } // is.read(b,0,2); // is.read(b,off,len); //read返回读取的文件大小 //最大不超过b.length,实际读取以文件大小为准 //打印的字节 System.out.println(Arrays.toString(b)); //如何把字节数组转成字符串 System.out.println(new String(b)); // while(is.read(b)!=-1){ // // } //关闭流 is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block //文件没有找到异常 e.printStackTrace(); } catch (IOException e) { //文件读写异常 // TODO Auto-generated catch block e.printStackTrace(); } }
public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("D:/IOFile/Ch05.txt"); BufferedInputStream bis = new BufferedInputStream(fis); //读取文件内容 byte [] b= new byte[bis.available()]; bis.read(b); System.out.println(new String(b)); // String(byte[])把字节数组转成字符串 // 错误:不要尝试 // char [] c = new char[b.length]; // for(int i=0;i<c.length;i++){ // c[i]=(char)b[i]; // } // System.out.println(Arrays.toString(c)); //乱码,一个字节表示不了汉字 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
//读取文件 FileInputStream file = new FileInputStream("D:/IOFile/Ch02.txt"); byte[] b = new byte[file.available()]; //skip:跳过n个字节后再开始读取 file.skip(2); file.read(b); System.out.println(new String(b)); file.close();
try { //FileInputStream 必须要传一个文件名 BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:/IOfile/ch07.txt")); byte[] b=new byte[bis.available()]; //设置断点 bis.mark(bis.read(b,0,b.length/2)); System.out.println(new String(b)); System.out.println("暂停读取..."); Thread.sleep(2000); System.out.println("继续读取..."); //reset将当前复位的位置设置成上次调用mark标记的位置 bis.reset(); bis.read(b,b.length/2,b.length/2); System.out.println(new String(b)); // bis.reset(); // bis.read(b); // System.out.println(new String(b)); bis.close(); }
把n个流合并在一起读取。
try { //第一个文件流 FileInputStream fis1=new FileInputStream("D:/IoFile/ch02.txt"); //第二个文件流 FileInputStream fis2=new FileInputStream("D:/IoFile/ch03.txt"); //合并到序列流中 SequenceInputStream sis=new SequenceInputStream(fis1, fis2); //方式1 // //临时存放数据的数组 // int len =fis1.available()+fis2.available(); // byte[] b=new byte[2*len+1]; // //把每一次读取到的临时数据存放如sb中 //// StringBuffer sb=new StringBuffer(); // //一次性读取所有的内容 // int off=0; // int i=0; // while((i=sis.read(b,off,len))!=-1) { //// sb.append(); // off+=i; // } // System.out.println(new String(b)); //方式2 byte[] b=new byte[fis1.available()]; // StringBuffer sb=new StringBuffer(); // int i=0; while(sis.read(b)!=-1) { System.out.println(new String(b)); // sb.append(new String(b)); } // System.out.println(sb.toString()); sis.close(); }
try { //三个文件流 FileInputStream fis1 = new FileInputStream("D:/IoFile/Ch09.txt"); FileInputStream fis2 = new FileInputStream("D:/IoFile/Ch0901.txt"); FileInputStream fis3 = new FileInputStream("D:/IoFile/Ch0902.txt"); //把三个流添加到集合中 Vector<FileInputStream> vector= new Vector<>(); vector.add(fis1); vector.add(fis2); vector.add(fis3); // vector.elements(); //合并在一个序列流中 SequenceInputStream sis = new SequenceInputStream(vector.elements()); byte[] b = new byte[fis1.available()+fis2.available()+fis3.available()]; int off=0; for(int i=0;i<vector.size();i++){ //off是数组当中存放数据的起始下标位置 off+=sis.read(b,off,vector.get(i).available()); } System.out.println(new String(b)); sis.close(); }