




文档简介
Java/IO 流详解总结一下Java I/O文件读写基本类相关知识和概念,对于程序设计者来说,创建一个好的输入/输出系统是一项艰难的任务,其中挑战来源于所有的可能性,不仅存在各种源端与接收端(文件,控制台,网络链接等),而且还需要以各种不同的方式与它们通信(顺序,随机存取,缓冲,二进制,按字符,按行,按字等)Java I/O主要包括如下几个层次:1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。4. Reader(文件格式操作):抽象类,基于字符的输入操作。5. Writer(文件格式操作):抽象类,基于字符的输出操作。6. RandomAccessFile(随机文件操作):它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。1. File它是独立于系统平台的,利用其构造函数创建出相应的File 对象;再调用其中的方法实现对文件的各个属性方面的操作。构造函数:File( String path)File(String path, String FileName)File(File dir, String name)用途:File类提供了一种与机器无关的方式来描述一个文件对象的属性,通过类File所提供的方法,可以得到文件或目录的描述信息,这主要包括名称、所在路经、可读性、可写性、文件的长度等,还可以生成新的目录、改变文件名、删除文件、列出一个目录中所有的文件等。Java代码 1. publicstaticvoidmain(Stringargs)throwsIOException2. Filef=newFile(dir);3. 4. f.createNewFile();/创建一个.txt这个文件5. 6. f.mkdir();/创建一个名为.txt的目录7. 8. /*9. *使用绝对路径10. *11. *Filef=newFile(D:dirsrcA.java);12. *13. *f.createNewFile();14. */15. 16. /*17. *跨平台使用18. *19. *根据不同操作系统获得对应的分隔符FilefDir=newFile(File.separator);20. *21. *StringstrFile=dir+File.separator+src+File.separator+A.java;22. *23. *Filef=newFile(fDir,strFile);24. *25. *f.createNewFile();26. *27. *f.delete();/删除文件或目录28. *29. */f.deleteOnExit();30. */31. 32. /*33. *在缺省的临时文件目录下创建临时文件34. *35. *for(inti=0;i5;i+)36. *37. *38. *39. *Filef=File.createTempFile(winTemp,.tmp);40. *41. *f.deleteOnExit();/退出时删除42. *43. *44. *45. *46. */47. 48. /*49. *列出指定目录下所有子目录及文件的名称50. */51. FilefDir=newFile(File.separator);52. StringstrFile=dir+File.separator+src;53. Filef=newFile(fDir,strFile);54. Stringnames=f.list();55. for(inti=0;inames.length;i+)56. System.out.println(namesi);57. 58. 59. /有过滤器的情况FilenameFilter是个接口60. Filedir=newFile(File.separator);61. 62. Stringfilepath=dir+File.separator+src;63. 64. /*65. *dir66. *上级抽象路径,如果dir为null,那么程序将自动调用单个参数的File构造方法,同时将filepath路径应用到File但构造参数67. *如果dir为/,则此路径为本文件所在磁盘根目录68. */69. Filef=newFile(dir,filepath);70. if(f.exists()71. else72. f.mkdirs();73. 74. 75. Stringnames=f.list(newFilenameFilter()/实现了FilenameFilter接口的匿名类,实现accept方法过滤文件76. 77. Override78. publicbooleanaccept(Filedir,Stringname)79. System.out.println(name.indexOf(.java);80. returnname.indexOf(.java)!=-1;81. 82. );83. 84. for(inti=0;inames.length;i+)85. System.out.println(namesi);86. 87. javaview plaincopy1. publicstaticvoidmain(Stringargs)throwsIOException2. Filef=newFile(dir);3. 4. f.createNewFile();/创建一个.txt这个文件5. 6. f.mkdir();/创建一个名为.txt的目录7. 8. /*9. *使用绝对路径10. *11. *Filef=newFile(D:dirsrcA.java);12. *13. *f.createNewFile();14. */15. 16. /*17. *跨平台使用18. *19. *根据不同操作系统获得对应的分隔符FilefDir=newFile(File.separator);20. *21. *StringstrFile=dir+File.separator+src+File.separator+A.java;22. *23. *Filef=newFile(fDir,strFile);24. *25. *f.createNewFile();26. *27. *f.delete();/删除文件或目录28. *29. */f.deleteOnExit();30. */31. 32. /*33. *在缺省的临时文件目录下创建临时文件34. *35. *for(inti=0;i5;i+)36. *37. *38. *39. *Filef=File.createTempFile(winTemp,.tmp);40. *41. *f.deleteOnExit();/退出时删除42. *43. *44. *45. *46. */47. 48. /*49. *列出指定目录下所有子目录及文件的名称50. */51. FilefDir=newFile(File.separator);52. StringstrFile=dir+File.separator+src;53. Filef=newFile(fDir,strFile);54. Stringnames=f.list();55. for(inti=0;inames.length;i+)56. System.out.println(namesi);57. 58. 59. /有过滤器的情况FilenameFilter是个接口60. Filedir=newFile(File.separator);61. 62. Stringfilepath=dir+File.separator+src;63. 64. /*65. *dir66. *上级抽象路径,如果dir为null,那么程序将自动调用单个参数的File构造方法,同时将filepath路径应用到File但构造参数67. *如果dir为/,则此路径为本文件所在磁盘根目录68. */69. Filef=newFile(dir,filepath);70. if(f.exists()71. else72. f.mkdirs();73. 74. 75. Stringnames=f.list(newFilenameFilter()/实现了FilenameFilter接口的匿名类,实现accept方法过滤文件76. 77. Override78. publicbooleanaccept(Filedir,Stringname)79. System.out.println(name.indexOf(.java);80. returnname.indexOf(.java)!=-1;81. 82. );83. 84. for(inti=0;inames.length;i+)85. System.out.println(namesi);86. 87. javaview plaincopy1. publicstaticvoidmain(Stringargs)throwsIOException2. Filef=newFile(dir);3. 4. f.createNewFile();/创建一个.txt这个文件5. 6. f.mkdir();/创建一个名为.txt的目录7. 8. /*9. *使用绝对路径10. *11. *Filef=newFile(D:dirsrcA.java);12. *13. *f.createNewFile();14. */15. 16. /*17. *跨平台使用18. *19. *根据不同操作系统获得对应的分隔符FilefDir=newFile(File.separator);20. *21. *StringstrFile=dir+File.separator+src+File.separator+A.java;22. *23. *Filef=newFile(fDir,strFile);24. *25. *f.createNewFile();26. *27. *f.delete();/删除文件或目录28. *29. */f.deleteOnExit();30. */31. 32. /*33. *在缺省的临时文件目录下创建临时文件34. *35. *for(inti=0;i5;i+)36. *37. *38. *39. *Filef=File.createTempFile(winTemp,.tmp);40. *41. *f.deleteOnExit();/退出时删除42. *43. *44. *45. *46. */47. 48. /*49. *列出指定目录下所有子目录及文件的名称50. */51. FilefDir=newFile(File.separator);52. StringstrFile=dir+File.separator+src;53. Filef=newFile(fDir,strFile);54. Stringnames=f.list();55. for(inti=0;inames.length;i+)56. System.out.println(namesi);57. 58. 59. /有过滤器的情况FilenameFilter是个接口60. Filedir=newFile(File.separator);61. 62. Stringfilepath=dir+File.separator+src;63. 64. /*65. *dir66. *上级抽象路径,如果dir为null,那么程序将自动调用单个参数的File构造方法,同时将filepath路径应用到File但构造参数67. *如果dir为/,则此路径为本文件所在磁盘根目录68. */69. Filef=newFile(dir,filepath);70. if(f.exists()71. else72. f.mkdirs();73. 74. 75. Stringnames=f.list(newFilenameFilter()/实现了FilenameFilter接口的匿名类,实现accept方法过滤文件76. 77. Override78. publicbooleanaccept(Filedir,Stringname)79. System.out.println(name.indexOf(.java);80. returnname.indexOf(.java)!=-1;81. 82. );83. 84. for(inti=0;inames.length;i+)85. System.out.println(namesi);86. 87. 2. InputStream/OutputStream(抽象基类)(1) 它们主要提供文件内容操作的基本功能函数read()、 write()、close()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写。(2)文件操作的一般方法:根据所要操作的类型生成对应输入输出文件类的对象;调用此类的成员函数实现文件数据的读写;关闭此文件流对象。(3)文件操作的应用要点:异常的捕获:由于包java.io中几乎所有的类都声明有I/O异常,因此程序应该对这些异常加以处理。流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。上边两个抽象基类实现类有FileInputStream/FileOutputStream(本地文件读写类):它们用于本地文件的二进制格式顺序读写。java.io.FileInputStream是InputStream的子类。从开头File名称上就可以知道,FileInputStream与从指定的文件中读取数据至目的地有关。而java.io.FileOutputStream是 OutputStream的子类,顾名思义,FileOutputStream主要与从来源地写入数据至指定的文件中有关。当建立一个FileInputStream或FileOutputStream的实例时,必须指定文件位置及文件名称,实例被建立时文件的流就会开启;而不使用流时,必须关闭文件流,以释放与流相依的系统资源,完成文件读/写的动作。FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte 数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个 byte数组通常扮演承接数据的中间角色。Java代码 1. publicclassFileStreamDemo2. 3. publicstaticvoidmain(Stringargs)4. 5. try6. 7. bytebuffer=newbyte1024;8. 9. /来源文件10. FileInputStreamfileInputStream=newFileInputStream(newFile(args0);11. 12. /目的文件13. FileOutputStreamfileOutputStream=newFileOutputStream(newFile(args1);14. 15. /available()可取得未读取的数据长度16. System.out.println(复制文件:+fileInputStream.available()+字节);17. 18. while(true)19. if(fileInputStream.available()1024)20. /剩余的数据比1024字节少21. /一位一位读出再写入目的文件22. intremain=-1;23. while(remain=fileInputStream.read()!=-1)24. fileOutputStream.write(remain);25. 26. break;27. else28. /从来源文件读取数据至缓冲区29. fileInputStream.read(buffer);30. /将数组数据写入目的文件31. fileOutputStream.write(buffer);32. 33. 34. 35. /关闭流36. fileInputStream.close();37. fileOutputStream.close();38. 39. System.out.println(复制完成);40. catch(ArrayIndexOutOfBoundsExceptione)41. System.out.println(using:javaFileStreamDemosrcdes);42. e.printStackTrace();43. catch(IOExceptione)44. e.printStackTrace();45. 46. 47. javaview plaincopy1. publicclassFileStreamDemo2. 3. publicstaticvoidmain(Stringargs)4. 5. try6. 7. bytebuffer=newbyte1024;8. 9. /来源文件10. FileInputStreamfileInputStream=newFileInputStream(newFile(args0);11. 12. /目的文件13. FileOutputStreamfileOutputStream=newFileOutputStream(newFile(args1);14. 15. /available()可取得未读取的数据长度16. System.out.println(复制文件:+fileInputStream.available()+字节);17. 18. while(true)19. if(fileInputStream.available()1024)20. /剩余的数据比1024字节少21. /一位一位读出再写入目的文件22. intremain=-1;23. while(remain=fileInputStream.read()!=-1)24. fileOutputStream.write(remain);25. 26. break;27. else28. /从来源文件读取数据至缓冲区29. fileInputStream.read(buffer);30. /将数组数据写入目的文件31. fileOutputStream.write(buffer);32. 33. 34. 35. /关闭流36. fileInputStream.close();37. fileOutputStream.close();38. 39. System.out.println(复制完成);40. catch(ArrayIndexOutOfBoundsExceptione)41. System.out.println(using:javaFileStreamDemosrcdes);42. e.printStackTrace();43. catch(IOExceptione)44. e.printStackTrace();45. 46. 47. javaview plaincopy1. publicclassFileStreamDemo2. 3. publicstaticvoidmain(Stringargs)4. 5. try6. 7. bytebuffer=newbyte1024;8. 9. /来源文件10. FileInputStreamfileInputStream=newFileInputStream(newFile(args0);11. 12. /目的文件13. FileOutputStreamfileOutputStream=newFileOutputStream(newFile(args1);14. 15. /available()可取得未读取的数据长度16. System.out.println(复制文件:+fileInputStream.available()+字节);17. 18. while(true)19. if(fileInputStream.available()1024)20. /剩余的数据比1024字节少21. /一位一位读出再写入目的文件22. intremain=-1;23. while(remain=fileInputStream.read()!=-1)24. fileOutputStream.write(remain);25. 26. break;27. else28. /从来源文件读取数据至缓冲区29. fileInputStream.read(buffer);30. /将数组数据写入目的文件31. fileOutputStream.write(buffer);32. 33. 34. 35. /关闭流36. fileInputStream.close();37. fileOutputStream.close();38. 39. System.out.println(复制完成);40. catch(ArrayIndexOutOfBoundsExceptione)41. System.out.println(using:javaFileStreamDemosrcdes);42. e.printStackTrace();43. catch(IOExceptione)44. e.printStackTrace();45. 46. 47. PipedInputStream/PipedOutputStream(管道输入输出)(1)它用于实现管道的二进制格式的输入输出(将一个线程的输出结果直接连接到另一个线程的输入端口,实现两者数据直接传送)。(2) PipedReader/PipedWriter类:它用于实现管道的字符格式的输入输出。(3)要求:操作时需要将两个端口相互连结。(4)实现原理:(5) 管道的连接:方法一:是通过构造函数直接将某一个程序的输出作为另一个程序的输入,在定义对象时指明目标管道对象方法二:是利用双方类中的任一个成员函数 connect()相连接(6)实例讲解: Sender.java, Receiver.java, PipedIO.java (使用PipedWriter,PipedReader)Sender.javaJava代码 1. importjava.io.PipedWriter;2. importjava.util.Random;3. 4. classSenderextendsThread5. privateRandomrand=newRandom();6. privatePipedWriterout=newPipedWriter();7. 8. publicPipedWritergetPipedWriter()9. returnout;10. 11. 12. publicvoidrun()13. while(true)14. for(charc=A;c=z;c+)15. try16. out.write(c);17. sleep(rand.nextInt(500);18. catch(Exceptione)19. thrownewRuntimeException(e);20. 21. 22. 23. 24. javaview plaincopy1. importjava.io.PipedWriter;2. importjava.util.Random;3. 4. classSenderextendsThread5. privateRandomrand=newRandom();6. privatePipedWriterout=newPipedWriter();7. 8. publicPipedWritergetPipedWriter()9. returnout;10. 11. 12. publicvoidrun()13. while(true)14. for(charc=A;c=z;c+)15. try16. out.write(c);17. sleep(rand.nextInt(500);18. catch(Exceptione)19. thrownewRuntimeException(e);20. 21. 22. 23. 24. javaview plaincopy1. importjava.io.PipedWriter;2. importjava.util.Random;3. 4. classSenderextendsThread5. privateRandomrand=newRandom();6. privatePipedWriterout=newPipedWriter();7. 8. publicPipedWritergetPipedWriter()9. returnout;10. 11. 12. publicvoidrun()13. while(true)14. for(charc=A;c=z;c+)15. try16. out.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度电视机产品智能语音交互技术研发合同
- 2025年度土地买卖合同履行及监管规范
- 诺如知识培训方案课件
- 2025年度汽车租赁企业培训及拓展合同
- 2025年度智慧校园食堂运营管理承包合同
- 2025版涂料产品进出口代理合同标准范本
- 2025版科技园区融资中介服务合作协议范本
- 2025版新能源设备以租代售租赁协议范本
- 2025版水管材料电商平台服务条款合同
- 2025合同样本库建设与管理的规范指南
- 《医药电子商务实务》考试复习题库(含答案)
- 钢板仓施工流程及安全保证方案
- 农业互联网与农产品营销策略优化
- 知识产权具体实施细则
- 泄密案件整改报告范文
- 船舶危险源辨识及防范措施
- 严重精神障碍患者报告卡
- 空气源热泵计算
- 学员陪跑合同模板
- 钢结构大棚安拆专项施工方案
- 消化内科护士进修总结汇报
评论
0/150
提交评论