本文主要给大家介绍java的InputStream 流的使用。
(1)FileInputstream: 子类,读取数据的通道
使用步骤:
1.获取目标文件:new File()
2.建立通道:new FileInputString()
3.读取数据:read()
4.释放资源:close()
//一些默认要导入的包 import java.io.File; import java.io.FileInputStream; import java.io.IOException;
public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //分别调用方法查看效果 test1(); System.out.println("-------------------------------------------"); test2(); System.out.println("-------------------------------------------"); test3(); System.out.println("-------------------------------------------"); test4(); }
(2)读取数据的三种方式
1.直接读取 (一次只能一个字节)
int date = fileInputStream.read(); char date3 = (char)fileInputStream.read();
//方式一 直接打印 public static void test1() throws IOException{ //(1)获取目标文件路径 File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java"); //(2)根据目标文件路径 建立通道: new FileInputStream(file) FileInputStream fileInputStream = new FileInputStream(file); //(3)读取数据 :read(); int date = fileInputStream.read();//这里是int类型 int date2 = fileInputStream.read();// char date3 = (char)fileInputStream.read(); //以char类型显示 System.out.println(date+"\\"+date2+"\\"+date3); //(4)释放资源 fileInputStream.close(); }
2.单独使用for循环(效率低)
for(int i = 0; i < file.length();i++){ System.out.print((char)fileInputStream.read()); }
//方式二 循环遍历 public static void test2() throws IOException{ //通过时间测试效率 long startTime = System.currentTimeMillis(); File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java"); FileInputStream fileInputStream = new FileInputStream(file); //for循环 for(int i = 0; i < file.length();i++){ System.out.print((char)fileInputStream.read()); } fileInputStream.close(); long endTime = System.currentTimeMillis(); System.out.println("读取文件所花时间:"+(endTime-startTime)); }
3.Byte[ ] 缓冲区(只能读取指定的字节数不能读取一个完整的文件)
byte[] bt = new byte[1024]; int count = fileInputStream.read(bt); System.out.println(new String (bt,0,count));
//方式三 创建缓冲区(只能读取制定的大小,不能读取一个完整的文件) public static void test3() throws IOException{ File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java"); FileInputStream fileInputStream = new FileInputStream(file); //创建缓冲区,加快读取数据,确定要读取的字节大小 byte[] bt = new byte[1024]; //read() 读取字节 int count = fileInputStream.read(bt); System.out.println(count); //显示读取到的字节数 System.out.println(new String (bt,0,count));//将字节转为字符串显示 fileInputStream.close(); }
4.缓冲区和循环结合。缓冲区一般设置为1024的倍数。理论上设置的缓冲区越大,读取效率越高
byte[] bt = new byte[1024]; int count = 0; while((count = fileInputStream.read(bt)) != -1){ System.out.println(new String (bt,0,count)); }
//方式四 循环与缓冲区结合(效率高) public static void test4() throws IOException{ //通过时间测试效率 long startTime = System.currentTimeMillis(); File file = new File("C:\\Users\\joke\\Desktop\\Demo1.java"); FileInputStream fileInputStream = new FileInputStream(file); //缓冲区一般设置为1024的倍数。理论上设置的缓冲区越大,读取效率越高 byte[] bt = new byte[1024]; int count = 0; //read返回 -1 时,证明已经遍历完 while((count = fileInputStream.read(bt)) != -1){ //字符串型显示(从bt中的第0个字节开始遍历count个长度) System.out.println(new String (bt,0,count)); } fileInputStream.close(); long endTime = System.currentTimeMillis(); System.out.println("读取文件所花时间:"+(endTime-startTime)); }
陌陌说:
在以上,对比第二个和第四个方法,会发现方法四的效率是比较高的,所以推荐使用的四个方法
在这里我们是直接抛出异常,除了抛出之外我们还可以使用
try{ }cater{ }finally{ }
的方式来处理异常
以上所述是小编给大家介绍的java IO流 之 输入流 InputString()的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍java IO流 之 输出流 OutputString()的使用,包括了java IO流 之 输出流 OutputString()的使用的使用技巧和注意事项,需要的朋友参考一下 FileOutPutStream:子类,写出数据的通道 步骤: 1.获取目标文件 2.创建通道(如果原来没有目标文件,则会自动创建一个) 3.写入数据 write() 4.
我有一个输入流,其中包含XML数据,我想在返回输入流之前对其进行解析。 当然,我可以将流保存为字节数组,并从中返回一个新的InputStream,或者 在“myObj”上创建第二个InputStream。 但是有什么方法可以“即时”解析流吗? 编辑: 基本上,我正在寻找一种在解析后重用流的方法。在不消耗流的情况下解析流,分别在解析后重置流。 解决方案: 我找到的解决方案是使用BufferedInp
主要内容:C++输入流和输出流本教程一开始就提到,C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据; 使用 fscanf()、fgets() 等函数读取文件中的数据,使
问题内容: 我下面有以下代码示例。你可以在其中输入的命令,即回显结果。但是,先读后。其他输出流不起作用? 为什么会这样或我做错了什么?我的最终目标是创建一个线程计划任务,该任务定期执行对/ bash的命令,因此必须一前一后工作,而不能停止工作。我也一直在经历错误的任何想法? 谢谢。 问题答案: 首先,我建议更换生产线 与线 ProcessBuilder是Java 5中的新增功能,它使运行外部进程更
原因:java.lang.IllegalArgumentException:无法检索类路径资源[BZH91AY&SY 90 WT A%l!!9 d N$L]的InputStream: 在org.springframework.beans.propertyeditors.inputstreameditor.setastext(inputstreameditor.java:77)在org.spring
下面我们要讨论流的输入,这是用流读取运算符(即重载的运算符>>)实现的。流读取运算符通常会跳过输人流中的空格、tab键、换行符等等的空白字符,稍后将介绍如何改变这种行为。 当遇到输入流中的文件结束符时,流读取运算符返回0(false);否则,流读取运算符返回对调用该运算符的对象的引用。每个输入流都包含一组用于控制流状态(即格式化、出错状态设置等)的状态位。当输入类型有错时,流读取运算符就会设置输人