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. 【CF734F】Anton and School(构造)

    [CF734F]Anton and School(构造) 题面 Codeforces 洛谷 题解 算是一道\(easy\)? 发现\((a\&b)+(a|b)=a+b\). 那么根据给定条件我 ...

  2. emwin之小键盘制作

    @2019-01-29 [小记] 小键盘的BUTTON控件由WINDOW控件组织,只需将所用BUTTON控件禁止聚焦即可. 小键盘的BUTTON控件由FRAMEWIN控件组织,将所用BUTTON控件禁 ...

  3. 20165223《JAVA程序设计》第一周学习总结

    20165223 <JAVA程序设计>第一周学习总结 教材学习内容总结 通过网站JAVA第一章视频教程.教材.老师所给的教程及网上查询进行学习 第一章要点 JAVA地位和特点 地位:网络. ...

  4. Arch Linux中安装Anaconda

    安装步骤 通过AUR安装yaourt -S anaconda 激活Anaconda环境source /opt/anaconda/bin/activate root 关闭Anaconda环境source ...

  5. [FWT] UOJ #310. 【UNR #2】黎明前的巧克力

    [uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...

  6. tfs 2013 利用 web deploy 完成asp.net站点自动发布

    课题起因: 目前我们团队使用visual studio 2013开发asp.net项目, 使用tfs2013 做源码管理, 每天早上手动发布项目文件包,复制到测试服务器的站点文件夹下覆盖老文件,用此方 ...

  7. Could not install the app on the device, read the error above for details. Make sure you have an Android emulator running or a device connected and have set up your Android development environment:

    Administrator@DESKTOP-EHCTIOR MINGW64 /d/react-native-eyepetizer (master) $ react-native run-android ...

  8. NOIP 提高组 2014 飞扬的小鸟(记录结果再利用的DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9937201.html 参考资料: [1]:https://www.luogu.org/blog/xxzh242 ...

  9. spring mvc后端校验validator

    springmvc中我们使用hibernate的校验框架validation: pom: <validator.version>5.2.4.Final</validator.vers ...

  10. 5款Mac极速下载工具推荐和下载

    最近几年用到下载工具的情况其实很少了,比如几年前我们可能经常用下载工具下载视频.音乐.图书等资源,但今天的我们更多的在线看视频.在线听音乐了,偶尔用到下载的时候直接用浏览器自带的下载工具也完全够用了, ...