Java IO系统学习之各种输入输出流篇

来源:互联网 发布:unity3d 逐帧动画 编辑:程序博客网 时间:2024/06/05 17:17

上一篇简单写了Java IO流中的File类,一般我们操作文件时肯定会用到此类。这次我们来看下Java IO中其他的输入输出类。

首先,说到“输入”、“输出”要明确一点

输入:从文件(或数据源) =========》系统(或程序)

输出:从系统(或程序)=========》文件(或数据源)

贴上一段摘抄的原话:

流(stream)的概念源于 UNIX 中管道(pipe)的概念。在 UNIX 中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是 Internet 上的某个 URL。
流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,
只是简单地往流中写数据。形象的比喻——水流 ,文件======程序 ,文件和程序之间连接一个管道,水流就在
之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。

java中流的分类有几种

1.按流的方向分为:输出流、输入流

2.按流的类型分为:字符流、字节流

我们主要来看下常用的一些JAVA IO 类的操作和用法和互相转换的使用的例子

1.复制文件

public static void CopyFile() throws Exception{String pathName = "d:"+File.separator+"test2.txt"; //D盘已经存在此文件text2.txtString pathName2 = "d:"+File.separator+"test3.txt";File f = new File(pathName);File f2= new File(pathName2);InputStream in = new FileInputStream(f);OutputStream out = new FileOutputStream(f2);if(in!=null & out!=null){int temp = 0;while((temp=in.read())!=-1){out.write(temp);}}in.close();out.close();}

2.将字节流转换为字符流输出 和 将字节输入流变成字符输入流

public static void OutPutStreamWriter() throws Exception{String pathName = "d:"+File.separator+"test3.txt";File f = new File(pathName);Writer w = new OutputStreamWriter(new FileOutputStream(f));w.write("将字节流转换为字符流输出!");w.close();}

public static void InputStreamRead() throws Exception{String pathName = "d:"+File.separator+"test2.txt";File f = new File(pathName);Reader read = new InputStreamReader(new FileInputStream(f));char[] ch = new char[(int)f.length()];int tem = 0;int count = 0;while((tem=read.read())!= -1){ch[count++] = (char)tem;}System.out.println(new String(ch,0,count));read.close();}

3.使用内存流操作

public static void byteArrayInputStream() throws Exception{String tempStr = "abcdefghigklmn..";ByteArrayInputStream byteArray = new ByteArrayInputStream(tempStr.getBytes());ByteArrayOutputStream outbyte = new ByteArrayOutputStream();int t = 0;while((t=byteArray.read())!= -1){char ch = (char)t;outbyte.write(Character.toUpperCase(ch));}byteArray.close();outbyte.close();System.out.println(outbyte.toString());}

4.输出重定向

public static void outputStream()throws Exception{System.out.println("我就是我");System.setOut(new PrintStream(new FileOutputStream(new File("d:\\test1.txt"))));System.out.println("我的输出内容竟然跑到文件里来了!!!!");}
那么从上面的代码操作中我们可以慢慢捋出来java IO中的类的一些含义

文件操作流类                                                             管道流(线程间通信)回退流



还有一些我就不再阐述了大体从字面上就能看出作用,我们再来看下压缩和解压缩文件

文件压缩和解压缩 ZipInputStream  ZipOutputStream 

压缩

11. File file =  new File("d:"+ File.separator + "hello.txt");12. File zipFile =  new File("d:"+ File.separator + "hello.zip");13. InputStream input =  new FileInputStream(file);14. ZipOutputStream zipOut =  new ZipOutputStream( new FileOutputStream(15. zipFile));16. zipOut.putNextEntry( new ZipEntry(file.getName()));17. // 设置注释18. zipOut.setComment("hello");19. int temp = 0;20. while ((temp = input.read()) != -1){21. zipOut.write(temp);22. }23. input.close();24. zipOut.close();

压缩多个文件

14. // 要被压缩的文件夹15. File file =  new File("d:"+ File.separator + "temp");16. File zipFile =  new File("d:"+ File.separator + "zipFile.zip");17. InputStream input =  null ;18. ZipOutputStream zipOut =  new ZipOutputStream( new FileOutputStream(19. zipFile));20. zipOut.setComment("hello");21. if (file.isDirectory()){22. File[] files = file.listFiles();23. for ( int i = 0; i < files.length; ++i){24. input =  new FileInputStream(files[i]);25. zipOut.putNextEntry(newZipEntry(file.getName()26. + File.separator + files[i].getName()));27. int temp = 0;28. while ((temp = input.read()) != -1){29. zipOut.write(temp);30. }31. input.close();32. }33. }34. zipOut.close();

解压缩

14. File file =  new File("d:"+ File.separator + "hello.zip");15. File outFile =  new File("d:"+ File.separator + "unZipFile.txt");16. ZipFile zipFile =  new ZipFile(file);17. ZipEntry entry = zipFile.getEntry("hello.txt");18. InputStream input = zipFile.getInputStream(entry);19. OutputStream output =  new FileOutputStream(outFile);20. int temp = 0;21. while ((temp = input.read()) != -1){22. output.write(temp);23. }24. input.close();25. output.close();
解压缩多个文件

16. File file =  new File("d:"+ File.separator + "zipFile.zip");17. File outFile =  null ;18. ZipFile zipFile =  new ZipFile(file);19. ZipInputStream zipInput = newZipInputStream( new FileInputStream(file));20. ZipEntry entry =  null ;21. InputStream input =  null ;22. OutputStream output =  null ;23. while ((entry = zipInput.getNextEntry()) != null ){24. System.out.println("解压缩" + entry.getName() + "文件");25. outFile =  new File("d:"+ File.separator + entry.getName());26. if (!outFile.getParentFile().exists()){27. outFile.getParentFile().mkdir();28. }29. if (!outFile.exists()){30. outFile.createNewFile();31. }32. input = zipFile.getInputStream(entry);33. output =  new FileOutputStream(outFile);34. int temp = 0;35. while ((temp = input.read()) != -1){36. output.write(temp);37. }38. input.close();39. output.close();


到这里基本上IO的基本用法就算是完了!



0 0
原创粉丝点击