需求:把文件fos.txt中的内容读取出来在控制台输出FileInputStream 从文件系统中的文件获取输入字节构造方法
FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统的路径名name命名。使用字节输入流读数据的步骤:
- 创建字节输入流对象调用字节输入流对象的读数据方法释放资源
import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamDemo01 { public static void main(String[] args) throws IOException { //创建字节输入流对象 FileInputStream fis = new FileInputStream("基础语法/src/io/fos.txt"); //调用字节输入流读数据方法 //int read() ,从该输入流读取一个字节的数据 int by = fis.read(); System.out.println(by); //释放资源 fis.close(); } }
输出a
System.out.println((char)by);
第二次读取数据
//第一次读取数据 int by = fis.read(); System.out.println(by); System.out.println((char)by); //第二次读取数据 by = fis.read(); System.out.println(by); System.out.println((char)by);
两次读取数据的步骤都是一样的,能否用循环改进?如果文件到达末尾,他的返回值就是-1
int by = fis.read(); while( by != -1){ System.out.println((char)by); }
这次会输出一个死循环
因此我们得在循环体内再读一遍字节,才会往下一个字节去走
int by = fis.read(); while( by != -1){ System.out.print((char)by); by = fis.read(); }
优化上面的程序
int by; while ((by = fis.read()) != -1){ //fis.read() 读数据 ;by=fis.read() 把读取到的数据赋值给by ;用 by != -1 判断读取到的数据是否是-1 System.out.print((char)by); }复制文本文件
复制”窗里窗外.txt” 文件。分析:复制文本文件,其实就是把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)数据源 “基础语法/src/io/窗里窗外.txt” – 读数据–InputStream–但因为他是个抽象类所以最终选择FileInputStream。目的地"基础语法/src/io/窗里窗外1.txt" – 写数据–OutputStream–FileOutputStream思路:
- 根据数据源创建字节输入流对象根据目的地创建字节输出流对象读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)释放资源
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyTxtDemo { public static void main(String[] args) throws IOException{ //根据数据源创建字节输入流对象 FileInputStream fis = new FileInputStream("基础语法/src/io/窗里窗外.txt"); //根据目的地创建字节输出流对象 FileOutputStream fos = new FileOutputStream("基础语法/src/io/窗里窗外1.txt"); //读写数据,复制文本文件 int by; while((by=fis.read())!=-1){ fos.write(by); } fos.close(); fis.close(); } }字节流读数据(一次读一个字节数组数据)
需求:把文件fos.txt中的内容读取出来输出使用字节输入流读数据的步骤:
- 创建字节输入流对象调用字节输入流对象的读数据方法释放资源
import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamDemo02 { public static void main(String[] args) throws IOException{ //创建字节输入流对象 FileInputStream fis = new FileInputStream("基础语法/src/io/fos.txt"); //调用字节输入流对象的读数据方法 byte[] bys = new byte[5]; //第一次读取数据 int len = fis.read(bys); //实际读取的字节数 System.out.println(len); System.out.println(new String(bys)); //第二次读取数据 len = fis.read(bys); System.out.println(len); System.out.println(new String(bys,0,len)); //释放资源 fis.close(); } }
当实际读取的数为-1的时候,说明他已经到达末尾了。使用循环改进
import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamDemo03 { public static void main(String[] args) throws IOException{ //创建字节输入流对象 FileInputStream fis = new FileInputStream("基础语法/src/io/fos.txt"); byte[] bys = new byte[1024]; // 一般给1024及其整数倍 int len; while((len=fis.read(bys))!=-1){ System.out.println(new String(bys,0,len)); } //释放资源 fis.close(); } }复制图片
将1.jpg复制到2.jpg思路:
- 根据数据源创建字节输入流对象根据目的地创建字节输出流对象读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)释放资源
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyJpgDemo { public static void main(String[] args) throws IOException{ //根据数据源创建字节输入流对象 FileInputStream fis = new FileInputStream("基础语法/src/io/1.jpg"); //根据目的地创建字节输出流对象 FileOutputStream fos = new FileOutputStream("基础语法/src/io/2.jpg"); //读写数据,复制图片 byte[] bys = new byte[1024]; int len; while((len=fis.read(bys))!=-1){ fos.write(bys,0,len); } fos.close(); fis.close(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)