Java输入数据流详解

开发 后端
这里介绍Java输入数据流,InputStream类是所有输入数据流的父类,它是一个抽象类,定义了所有Java输入数据流都具有的共通特性。

Java输入数据流

在Java中,我们把能够读取一个字节序列的对象称作一个Java输入数据流;而我们把够写一个字节序列称作一个输出流。它们分别由抽象类 InputStream和OutputStream类表示。因为面向字节的流不方便用来处理存储为Unicode(每个字符使用两个字节)的信息。所以Java 引入了用来处理Unicode字符的类层次,这些类派生自抽象类Reader和Writer,它们用于读写双字节的Unicode字符,而不是单字节字符。

Java.io包简介

JDK标准帮助文档是这样解释Java.io包的,通过数据流、序列和文件系统为系统提供输入输出。

InputStream类和OutputStream类

InputStream类是所有输入数据流的父类,它是一个抽象类,定义了所有Java输入数据流都具有的共通特性。
java.io.InputStream的方法如下: 

  1. public abstract read()throws IOException 

 读取一个字节并返回该字节,如果到输入源的末则返回-1。一个具体的Java输入数据流需要重载此方法,以提供 有用的功能。例如:在FileInputStream类中,该方法从一个文件读取一个字节。

  1. public int read(byte[] b)throws IOException  

把数据读入到一个字节数据中,并返回实际读取的字节数目。如果遇到流末 则返回-1,该方法最多读取b.length个字节。

  1. public abstract int read(byte[] b,int off,int len)throws IOException  

把数据读入到一个字节数组中并返回实际读取的字节数目。如果遇到流的末尾则的返回-1。 其中参数off表示第一个字节在b中的位置,len表示读取的最大字节数。

  1. public long skip(long n)throws IOException  

略过N个字节不读取,会返回实际略过的字节数目。因为数据流中剩下的数据可能不到N 个字节那么多,所以此时返回值会小于N。

  1. public int available()throws IOException  

read方法(包括后面要讲的OutputStream类的Write方法)都能够阴塞一个线程,直到字节被 实际读取或写入。这意味着如果一个流不能立即被读或被写

  1. /*   
  2. * Created on 2005-3-10   
  3. * To change the template for this generated file go to   
  4. * Window>Preferences>Java>Code Generation>Code and Comments   
  5. */   
  6. package mytestfiles;   
  7. import java.io.BufferedReader;   
  8. import java.io.File;   
  9. import java.io.FileReader;   
  10. import java.io.FileWriter;   
  11. import java.io.IOException;   
  12. import java.io.PrintWriter;   
  13.  
  14. /**   
  15. * @author zhangqinglin   
  16. * To change the template for this generated type comment go to   
  17. * Window>Preferences>Java>Code Generation>Code and Comments   
  18. */   
  19. public class Files   
  20. {   
  21. public static void main(String[] args) throws IOException   
  22. {   
  23. Files f = new Files();   
  24. // System.out.println(f.readFile("f:\\LinkFile.java"));   
  25. // f.readAllFile("f:\\","LinkFile.java");   
  26. // f.readLineFile("f:\\","LinkFile.java");   
  27. // System.out.println(f.fileIsNull("f:\\","122.txt"));   
  28. // f.readFolderByFile("F:\\PDF");   
  29. // System.out.println(f.createAndDeleteFolder("ss","f:\\"));   
  30. // System.out.println(f.createAndDeleteFile("f:\\ss\\","TestFile.dat"));   
  31. String[] ss = new String[50];   
  32. for(int i=0;i{   
  33. ss[i] = "信息技术和互联网(计算机软硬件,通讯) "+i;   
  34. }   
  35. f.writeFile("f:\\ss\\","TestFile.txt",ss);   
  36. }   
  37. /**   
  38. * 文件的写入   
  39. * @param filePath(文件路径)   
  40. * @param fileName(文件名)   
  41. * @param args[]   
  42. * @throws IOException   
  43. */   
  44. public void writeFile(String filePath,String fileName,String[] args) throws IOException   
  45. {   
  46. FileWriter fw = new FileWriter(filePath+fileName);   
  47. PrintWriter out=new PrintWriter(fw);   
  48. for(int i=0;i{   
  49. out.write(args[i]);   
  50. out.println();   
  51. out.flush();   
  52. }   
  53. fw.close();   
  54. out.close();   
  55. }   
  56. /**   
  57. * 文件的写入   
  58. * @param filePath(文件路径)   
  59. * @param fileName(文件名)   
  60. * @param args   
  61. * @throws IOException   
  62. */   
  63. public void writeFile(String filePath,String fileName,String args) throws IOException   
  64. {   
  65. FileWriter fw = new FileWriter(filePath+fileName);   
  66. fw.write(args);   
  67. fw.close();   
  68. }   
  69. /**   
  70. * 创建与删除文件   
  71. * @param filePath   
  72. * @param fileName   
  73. * @return 创建成功返回true   
  74. * @throws IOException   
  75. */   
  76. public boolean createAndDeleteFile(String filePath,String fileName) throws IOException   
  77. {   
  78. boolean result = false;   
  79. File file = new File(filePath,fileName);   
  80. if(file.exists())   
  81. {   
  82. file.delete();   
  83. result = true;   
  84. System.out.println("文件已经删除!");   
  85. }   
  86. else   
  87. {   
  88. file.createNewFile();   
  89. result = true;   
  90. System.out.println("文件已经创建!");   
  91. }   
  92. return result;   
  93. }   
  94. /**   
  95. * 创建和删除目录   
  96. * @param folderName   
  97. * @param filePath   
  98. * @return 删除成功返回true   
  99. */   
  100. public boolean createAndDeleteFolder(String folderName,String filePath)   
  101. {   
  102. boolean result = false;   
  103. try   
  104. {   
  105. File file = new File(filePath+folderName);   
  106. if(file.exists())   
  107. {   
  108. file.delete();   
  109. System.out.println("目录已经存在,已删除!");   
  110. result = true;   
  111. }   
  112. else   
  113. {   
  114. file.mkdir();   
  115. System.out.println("目录不存在,已经建立!");   
  116. result = true;   
  117. }   
  118. }   
  119. catch(Exception ex)   
  120. {   
  121. result = false;   
  122. System.out.println("CreateAndDeleteFolder is error:"+ex);   
  123. }   
  124. return result;   
  125. }   
  126. /**   
  127. * 输出目录中的所有文件及目录名字   
  128. * @param filePath   
  129. */   
  130. public void readFolderByFile(String filePath)   
  131. {   
  132. File file = new File(filePath);   
  133. File[] tempFile = file.listFiles();   
  134. for(int i = 0;i{   
  135. if(tempFile[i].isFile())   
  136. {   
  137. System.out.println("File : "+tempFile[i].getName());   
  138. }   
  139. if(tempFile[i].isDirectory())   
  140. {   
  141. System.out.println("Directory : "+tempFile[i].getName());   
  142. }   
  143. }   
  144. }   
  145. /**   
  146. * 检查文件中是否为一个空   
  147. * @param filePath   
  148. * @param fileName   
  149. * @return 为空返回true   
  150. * @throws IOException   
  151. */   
  152. public boolean fileIsNull(String filePath,String fileName) throws IOException   
  153. {   
  154. boolean result = false;   
  155. FileReader fr = new FileReader(filePath+fileName);   
  156. if(fr.read() == -1)   
  157. {   
  158. result = true;   
  159. System.out.println(fileName+" 文件中没有数据!");   
  160. }   
  161. else   
  162. {   
  163. System.out.println(fileName+" 文件中有数据!");   
  164. }   
  165. fr.close();   
  166. return result;   
  167. }   
  168. /**   
  169. * 读取文件中的所有内容   
  170. * @param filePath   
  171. * @param fileName   
  172. * @throws IOException   
  173. */   
  174. public void readAllFile(String filePath,String fileName) throws IOException   
  175. {   
  176. FileReader fr = new FileReader(filePath+fileName);   
  177. int count = fr.read();   
  178. while(count != -1)   
  179. {   
  180. System.out.print((char)count);   
  181. count = fr.read();   
  182. if(count == 13)   
  183. {   
  184. fr.skip(1);   
  185. }   
  186. }   
  187. fr.close();   
  188. }   
  189. /**   
  190. * 一行一行的读取文件中的数据   
  191. * @param filePath   
  192. * @param fileName   
  193. * @throws IOException   
  194. */   
  195. public void readLineFile(String filePath,String fileName) throws IOException   
  196. {   
  197. FileReader fr = new FileReader(filePath+fileName);   
  198. BufferedReader br = new BufferedReader(fr);   
  199. String line = br.readLine();   
  200. while(line != null)   
  201. {   
  202. System.out.println(line);   
  203. line = br.readLine();   
  204. }   
  205. br.close();   
  206. fr.close();   
  207. }   
  208. }  

到这里Java输入数据流就介绍完了

【编辑推荐】

  1. Java参数传递机制分析:值与引用
  2. 从Java走进Scala:一步步教你使用Scala Actor
  3. Java新型垃圾回收器G1深入探索
  4. Java的synchronized关键字:同步机制总结
  5. Java语法技巧之双括弧初始化
责任编辑:彭凡 来源: Java中文网
相关推荐

2011-12-14 15:57:13

javanio

2011-08-29 10:19:09

Microsoft S控制较大数据流

2022-03-18 08:57:17

前端数据流选型

2020-02-06 19:12:36

Java函数式编程编程语言

2016-11-14 19:01:36

数据流聊天系统web

2009-04-13 16:35:25

TSQL查询SQL Server

2013-10-21 10:58:50

微软大数据SQL Server

2009-07-15 09:06:11

Linux图形系统X11的CS架构

2017-11-16 19:26:34

海量数据算法计算机

2021-10-27 10:43:36

数据流中位数偶数

2014-02-11 08:51:15

亚马逊PaaSAppStream

2011-04-14 14:43:38

SSISTransformat

2012-07-30 08:31:08

Storm数据流

2019-12-19 14:38:08

Flink SQL数据流Join

2011-04-19 09:18:02

SSIS数据转换

2019-06-18 13:51:08

大数据流处理新兴市场

2013-10-12 13:14:27

TwitterGoogle大数据

2010-04-30 09:53:34

Unix系统

2021-06-08 05:50:00

数据流数字化转型数字化

2010-04-28 15:52:15

数据流负载均衡
点赞
收藏

51CTO技术栈公众号