java.io.InputStream & java.io.FileInputStream

java.io.InputStream,这个抽象类是表示字节输入流的超类,这个抽象类的共性的方法有:

方法 作用
int read() 从输入流中读取数据的下一个字节,并返回,到末尾就返回-1
int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b之中
void close() 关闭输入流,并释放与输入流相关的系统资源

java.io.FileInputStream extends InputStream

构造方法

构造方法 作用
FileInputStream(String name) 创建一个FileInputStream对象,把该对象指向构造方法参数中指定的文件
FileInputStream(File file) 创建一个FileInputStream对象,把该对象指向构造方法参数中指定的文件

参数:String name(文件路径)、File file(文件对象)

2、读取文件

java程序 --> JVM --> OS --> OS调用读取数据的方法 --> 读取文件

3、字节输入流读取文件的步骤

  • 创建FileInputStream对象,构造方法中指定要读取的文件(路径名或者文件对象)
  • 使用FileInputStream对象的方法read,读取文件
  • 使用FileInputStream对象的方法close,释放资源
package cn.zhuobo.day14.streamOutput;

import java.io.FileInputStream;

import java.io.IOException;

public class Demo02FileInputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("/home/zhuobo/Desktop/a.txt");
/*int i = fis.read();
System.out.println(i);// 98
i = fis.read();
System.out.println(i);// 99
i = fis.read();
System.out.println(i);// 104*/
int i = 0;
while ((i = fis.read()) != -1) {
System.out.println(i);
}// 循环读取直到末尾,-1是末尾
}
}

4、字节输入流一次读取一个字节的原理

每次指针向后移动一个单位

5、一次读取多个字节

使用int read(byte[] b)

byte[] bytes = new byte[5];// 每次读取最多5个,但是一般定义长度为1024
int len = fis.read(bytes);// len指的是读取的有效字节个数
String str = new String(bytes);
System.out.println(len);
System.out.println(str); byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
System.out.println((new String(bytes)).trim());
}

6、文件复制练习

原文件-->读出来-->写进去-->目标文件

package cn.zhuobo.day14.streamOutput;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class FileCopy {
public static void main(String[] args) throws IOException {
File fileDes = new File("/home/zhuobo/Desktop/22.png");
FileOutputStream fos = new FileOutputStream(fileDes);
File fileSource = new File("/home/zhuobo/Desktop/dir/1.png");
FileInputStream fis = new FileInputStream(fileSource); int len = 0;
byte[] bytes = new byte[1024];
while((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
} // 先关闭写的流(output)再关闭读的流(input)
fos.close();
fis.close();
}

ava.io.InputStream & java.io.FileInputStream的更多相关文章

  1. 转换流读写操作 java.io.OutputStreamWriter ,java.io.InputStreamReader

    package seday07; import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStr ...

  2. 缓冲字符流 java.io.BufferedWriter ,java.io.BufferedReader,缓冲字符输出流:PrintWriter

    package seday07; import java.io.IOException;import java.io.PrintWriter; /*** @author xingsir * 缓冲字符流 ...

  3. 对象流,它们是一对高级流,负责即将java对象与字节之间在读写的过程中进行转换。 * java.io.ObjectOutputStream * java.io.ObjectInputStream

    package seday06; import java.io.Serializable;import java.util.Arrays; /** * @author xingsir * 使用当前类来 ...

  4. hive运行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:

    hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Jo ...

  5. java.io.OutputStream & java.io.FileOutputStream

    java.io.OutputStream & java.io.FileOutputStream 1.Java.io.OutputStream(字节输出流) 字节输出流,这是一个抽象类,是表示输 ...

  6. java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.2457258178644046891.8080/work/Tomcat/localhost/innovate-admin/C:/up/154884318438733213952/sys-error.log (没有那个文件或目录)

    环境: Ubuntu18 vue+elementUI 实现文件的上传 报错信息: MultipartFile.transferTo(dest) 报 FileNotFoundException java ...

  7. java io基础(java.io)

    首先流分为输入和输出流,java分为字节流和字符流 1.字节输入流io.InputStream io.InputStream是一个抽象类它实现了Closeable接口的抽象类.那么它的子类(io包下) ...

  8. 高效IO之Java IO体系(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括J ...

  9. 一头扎进 Java IO中-------java IO文件

    Java IO: 文件 在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这篇文章不会对每一个技术细节都做出解释,而是会针对文件存 ...

随机推荐

  1. 【hdu 6161】Big binary tree(二叉树、dp)

    多校9 1001 hdu 6161 Big binary tree 题意 有一个完全二叉树.编号i的点值是i,操作1是修改一个点的值为x,操作2是查询经过点u的所有路径的路径和最大值.10^5个点,1 ...

  2. 【POJ 1001】Exponentiation (高精度乘法+快速幂)

    BUPT2017 wintertraining(15) #6A 题意 求\(R^n\) ( 0.0 < R < 99.999 )(0 < n <= 25) 题解 将R用字符串读 ...

  3. redis主从复制和sentinel配置高可用

    一:redis主从配置1.环境准备 master : 192.168.50.10 6179 slave1: 192.168.50.10 6279 slave2: 192.168.50.10 63792 ...

  4. Angular、React.js 和Node.js到底选谁?

    为了工作,程序员选择正确的框架和库来构建应用程序是至关重要的,这也就是为什么Angular和React之间有着太多的争议.Node.js的出现,让这场战争变得更加复杂,虽然有选择权通常是一件很棒的事情 ...

  5. 09 Zabbix4.0系统clone、mass update使用

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 09 Zabbix4.0系统clone.mass update使用 1. clone使用: clo ...

  6. nginx.conf(centos7 1.14)主配置文件修改

    #nginx1.14 centos7# For more information on configuration, see:# * Official English Documentation: h ...

  7. LNOI2014LCA(树链剖分+离线操作+前缀和)

    题意:给一棵有根树,有多组询问,询问为l r z,求下标为l到r之间的点和z的lca的深度和. 如果我们一个一个求.emmmmm... 考虑答案怎么产生,仔细想一想,如果我们把l到r的所有点到根都加上 ...

  8. 20165223 2017-2018-2《Java程序设计》课程总结

    目录 每周作业链接汇总 实验报告链接汇总 自我剖析总结感悟 代码托管截图与链接 课堂项目实践 课后项目实践 课程收获与不足 学习建议 问卷调查 二维码链接 每周作业链接汇总 预备作业1:我期望的师生关 ...

  9. Markdown基础(内含:锚点使用,使用HTML,新页面跳转,目录生成)

    Github样式显示参考:点我 之前说过用word写文章,这次说说Markdown写文章(推荐) 逆天推荐使用VSCode编写 装这个插件写作更方便: 内含:锚点使用,使用HTML,新页面跳转,目录生 ...

  10. C#面向对象中类的继承和扫描顺序和接口

    1.   类的分类:普通基类.抽象基类(abstract  class)1.   类的扫描顺序:a.先近后远 b.(向上扫描)以谁身份声明的变量就在谁身上开始扫描, 2.   扫描的特殊情况:普通基类 ...