Java学习day35-io和io流体系,文件字节流
一、Java IO原理
1.IO流用来处理设备之间的数据传输。
2.Java程序中,对于数据的输入/输出操作以"流(stream)"的方式进行。
3.java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
4.Java IO原理:(不论输入还是输出,都是指计算机)
①输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
②输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。
5.流的分类:
①按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
②按数据流的流向不同分为:输入流,输出流
③按流的角色的不同分为:节点流,处理流
二、文件字节流
文件字节流非常通用,可以用来操作字符的文档,还可以操作任何的其他类型文件(图片、压缩包等),因为引用字节流直接使用的是二进制。
package day17; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Test1 { public static void main(String[] args){ // Test1.testFileInputStream(); // Test1.testFileOutputStream(); Test1.copyFile("D:/Test/tt1.txt","D:/Test/a/tt1.txt"); } /** * 文件字节输入流FileInputStream * */ public static void testFileInputStream(){ try { FileInputStream in = new FileInputStream("D:/Test/tt1.txt"); byte[] b = new byte[20];//设置一个byte数组接收读取文件的内容 int len = 0;//设置一个读取数据的长度 // in.read(b); //in.read方法有一个返回值,返回值是读取的数据的长度,如果读取到最后一个数据,还会向后读一个,这个时候返回值就是-1 //也就意味着当in.read的返回值是-1时,整个文件就读取完毕 while((len = in.read(b)) != -1){ System.out.println(new String(b,0,len)); //new String(b,0,len),参数1是缓冲数据的数组,参数2是从数组哪个位置开始转化字符串,参数3是总共转化几个字节 } in.close();//注意!流在使用完毕后一定要关闭 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 文件字节输出流FileOutputStream * */ public static void testFileOutputStream(){ try { FileOutputStream out = new FileOutputStream("D:/Test/tt4.txt");//指定向tt4输出数据 String str = "asdfghjkl"; out.write(str.getBytes());//把数据写到内存中 out.flush();//把内存中数据刷写到硬盘 out.close();//关闭流 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 复制文件到指定位置 * @param inPath 源文件的路径 * @param outPath 复制到的文件夹位置 * */ public static void copyFile(String inPath, String outPath){ try { FileInputStream in = new FileInputStream(inPath);//读取的源文件 FileOutputStream out = new FileOutputStream(outPath);//复制到的目标文件 byte[] b = new byte[100]; int len = 0; while((len = in.read(b)) != -1){ out.write(b, 0, len);//参数1是写的缓冲数组,参数2是从数组的哪个位置开始,参数3是获取的数组的总长 } out.flush();//把写到内存的数据刷到硬盘 out.close(); in.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

浙公网安备 33010602011771号