IO流
IO的操作步骤
FileInputStream 字节输入流
File file=new File("a.txt"); 文件 //使用流和具体的文件关联 InputStream is= new FileInputStream(file); int c; //将读取到的内容临时存入c,判断是否读到文件末尾,-1 while((c=is.read())!=-1){ System.out.println(c); } //关闭流 is.close(); File file=new File("b.txt"); //流 InputStream is=new FileInputStream(file); //定义一个存储数据的临时空间 byte[] bs=new byte[1024]; //将读取的内容存入临时空间,返回读取到的字节数 int len; while((len=is.read(bs))!=-1){ System.out.println(new String(bs,0,len,"UTF-8")); } is.close();
Reader字符输入流
File file=new File("b.txt"); Reader r=null; r=new FileReader(file); char[] c=new char[3]; //接收读取到的字符个数 int len; while((len=r.read(c))!=-1){ System.out.println(new String(c,0,len)); } r.close();
OutputStream 字节输出流
//1、文件 File file=new File("a.txt"); //2、流 FileOutputStream os=new FileOutputStream(file); byte[] bs=newbyte[]{97,98,99}; bs="你我他".getBytes("GBK");//GBK编码 //写出 for(int i=0;i<2;i++){ os.write(bs); os.flush();//输出流要刷新缓存 } //刷新 os.close();
Writer字符输出流
File file=new File("e1.txt"); Writer w=new FileWriter(file,true); //(file代表要输出的文件,append表示是否在原文件的后面追加) String str=new String("你".getBytes("GBK")); System.out.println(str); w.write(str); w.flush(); w.close();
文件的复制 字符流边读边写
File src=new File("test.png"); //目的地 File dest=new File("testcopy.png"); Reader r=new FileReader(src); Writer w=new FileWriter(dest); char[]car=newchar[1024]; int len; //循环读取 while((len=r.read(car))!=-1){ w.write(car,0,len); } w.flush(); w.close();//先开启的流后关闭 r.close();
字符流 边写边读
File src=new File("test.png"); //目的地 File dest=new File("testcopy.png"); InputStream is=new FileInputStream(src); OutputStream os=new FileOutputStream(dest); byte[]car=newbyte[2]; int len; while((len=is.read(car))!=-1){ os.write(car,0,len); } os.flush(); os.close(); is.close();
缓冲流 BufferInputStream 以及 BufferOutputStream
提高性能读取文件 +新增的方法(不能使用多态)
InputStream is=new FileInputStream("a.txt"); //处理流套在结点流之上 BufferedInputStream bis=new BufferedInputStream(is); byte [] bytes=new byte[1024]; int len; while((len=bis.read(bytes))!=-1){ System.out.println(newString(bytes,0,len,"utf-8")); } //内部会帮我们关闭其他流 bis.close(); BufferedReader br=new BufferedReader(new FileReader("a.txt")); String data; while(null!=(data=br.readLine())){ System.out.println(data); } br.close(); BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("f.txt")); bos.write("核力量".getBytes()); bos.flush(); bos.close(); File file=new File("g.txt"); Writer w=new FileWriter(file); //流准备好了 BufferedWriter bw=new BufferedWriter(w); //写数据 bw.write("hellWorld你好世界"); bw.newLine(); bw.write("世界你好"); //刷新 bw.flush(); //释放资源 bw.close();
转换处理流
InputStreamReader
字节流输入 字符流输出
//解决乱码而且方便 //通过字节流读取文件内容,由转换流内部帮我们将字节转为字符,而且我们设置了编码 InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"GBK"); BufferedReader bufferedReader=new BufferedReader(isr); String str1; while((str1=bufferedReader.readLine())!=null){ System.out.println(str1); } bufferedReader.close();
数据处理流
DataInputStream DataOutputStream
其他文件是以String类型的数据 但数据处理流可以用来处理 其他类型的数据 例如int ,double等基本类型的数据
OutputStream os=new FileOutputStream("a.txt"); DataOutputStream dos=new DataOutputStream(os); dos.writeInt(1111); dos.flush(); dos.close(); DataInputStreamd is=new DataInputStream(new FileInputStream("a.txt")); int i=dis.readInt(); System.out.println(i); dis.close();
对象流
使用对象流时,类一定要序列化。如果希望某些属性不被序列化,可在属性里加入关键字 transient
//序列化 OutputStream os=new FileOutputStream("a.txt"); //处理流对象流 ObjectOutputStream oos=new ObjectOutputStream(os); //写出对象 oos.writeObject(newPerson("zs",18,true)); oos.flush(); oos.close(); //反序列化 ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt")); Person p=(Person)ois.readObject(); System.out.println(p); ois.close();
ByteArrayInputStream与ByteArrayOutputStream
byte[] bytes="abcdefghijklmnopqrstuvwxyz".getBytes(); StringBuilder sb=new StringBuilder(); //字节数组输入流 ByteArrayInputStream bais=new ByteArrayInputStream(bytes); int temp; while((temp=bais.read())!=-1){ sb.append((char)temp); } System.out.println(sb);