1.概念java
流按操做类型分为两种:设计模式
2.IO流经常使用父类数组
字节流的抽象父类:ui
字符流的抽象父类:加密
3.IO程序书写spa
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class Demo1_FileInputStream { public static void main(String[] args) throws IOException { // demo1(); FileInputStream fis = new FileInputStream("xxx.txt"); //建立一个文件输入流对象,并关联xxx.txt int b; //定义变量,记录每次读到的字节 while((b = fis.read()) != -1) { //将每次读到的字节赋值给b并判断是不是-1 System.out.println(b); //打印每个字节 } fis.close(); //关闭流释放资源 } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("xxx.txt");//建立流对象 int x = fis.read(); //从硬盘上读取一个字节 System.out.println(x); int y = fis.read(); System.out.println(y); int z = fis.read(); System.out.println(z); int a = fis.read(); System.out.println(a); int b = fis.read(); System.out.println(b); fis.close(); //关流释放资源 } }
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo2_FileOutputStream { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("yyy.txt"); //自动建立没有的对象 fos.write(97); //虽然写出的是一个int数,可是到文件上的是一个字节,会自动去除前三个八位 fos.write(98); fos.write(99); fos.close(); } }
public static void main(String[] args) throws IOException { // demo1(); FileOutputStream fos = new FileOutputStream("yyy.txt",true);//追加在第二个参数传true fos.write(97); fos.write(98); fos.close(); }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo3_Copy { public static void main(String[] args) throws IOException { // demo1(); FileInputStream fis = new FileInputStream("视频.avi"); //建立输入流对象,关联视频 FileOutputStream fos = new FileOutputStream("copy.avi"); //建立输出流对象,关联copy.avi int b; while((b = fis.read()) != -1) { //在不断读取每一个字节 fos.write(b); //将每个字节写出 } fis.close(); //关流释放资源 fos.close(); } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("图片1.png"); //建立输入流对象,关联图片 FileOutputStream fos = new FileOutputStream("copy.jpg"); //建立输出流对象,关联cop.jpg int b; while((b = fis.read()) != -1) { //在不断读取每一个字节 fos.write(b); //将每个字节写出 } fis.close(); //关流释放资源 fos.close(); } }
A:案例演示设计
A:案例演示code
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo3_Copy { public static void main(String[] args) throws IOException { //第二种拷贝,不推荐,有可能致使内存溢出 FileInputStream fis = new FileInputStream("视频.avi"); //建立输入流对象,关联视频 FileOutputStream fos = new FileOutputStream("copy.avi"); //建立输出流对象,关联copy.avi // int len = fis.available(); // System.out.println(len); byte[] arr = new byte[fis.available()]; //建立与文件同样大小的字节数组 fis.read(arr); //将文件上的字节读取到内存中 fos.write(arr); //将字节数组中的字节数据写到文件上 fis.close(); fos.close(); } }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo4_ArrayCopy { public static void main(String[] args) throws IOException { // demo1(); FileInputStream fis = new FileInputStream("xxx.txt"); FileOutputStream fos = new FileOutputStream("yyy.txt"); byte[] arr = new byte[2]; int len; while((len = fis.read(arr)) != -1) { fos.write(arr,0,len); } fis.close(); fos.close(); } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("xxx.txt"); byte[] arr = new byte[2]; int a = fis.read(arr); //将文件上的字节读取到字节数组中 System.out.println(a); //读到的有效字节个数 for (byte b : arr) { //第一次获取到文件上的a和b System.out.println(b); } System.out.println("----"); int c = fis.read(arr); System.out.println(c); for (byte b : arr) { System.out.println(b); } fis.close(); } }
A:案例演示视频
public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("视频.avi"); FileOutputStream fos = new FileOutputStream("copy.avi"); byte[] arr = new byte[1024 * 8]; int len; while((len = fis.read(arr)) != -1) { //忘记写arr,返回的是码表值 fos.write(arr,0,len); } fis.close(); fos.close(); }
A:缓冲思想对象
B.BufferedInputStream
C.BufferedOutputStream
D.小数组的读写和带Buffered的读取哪一个更快?
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo5_BufferCopy { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("视频.avi"); //建立输入流对象 FileOutputStream fos = new FileOutputStream("copy.avi");//建立输出流对象 //byte[] arr = new byte[8192]; BufferedInputStream bis = new BufferedInputStream(fis);//建立缓冲区对象,对输入流进行包装,让其变得更强 BufferedOutputStream bos = new BufferedOutputStream(fos); int b; while((b = bis.read()) != -1) { bos.write(b); } bis.close(); bos.close(); } }
flush()方法
close()方法
public static void main(String[] args) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("视频.avi")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.mp3")); int b; while((b = bis.read()) != -1) { bos.write(b); bos.flush(); } // bos.close(); // bis.close(); }
字节流读取中文的问题
字节流写出中文的问题
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Demo6_Chinese { public static void main(String[] args) throws IOException { // demo1(); FileOutputStream fos = new FileOutputStream("zzz.txt"); fos.write("同九年,汝独秀".getBytes()); fos.write("\r\n".getBytes()); fos.close(); } private static void demo1() throws FileNotFoundException, IOException { FileInputStream fis = new FileInputStream("yyy.txt"); byte[] arr = new byte[4]; int len; while((len = fis.read(arr)) != -1) { System.out.println(new String(arr,0,len)); } fis.close(); } }
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo7_TryFinally { public static void main(String[] args) throws IOException { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("xxx.txt"); fos = new FileOutputStream("yyy.txt"); int b; while((b = fis.read()) != -1) { fos.write(b); } }finally { try { if(fis != null) fis.close(); }finally { //try fianlly的目的是尽可能关闭 if(fos != null) fos.close(); } } } }
原理
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo7_TryFinally { public static void main(String[] args) throws IOException { try( FileInputStream fis = new FileInputStream("xxx.txt"); FileOutputStream fos = new FileOutputStream("yyy.txt"); MyClose mc = new MyClose(); ){ int b; while((b = fis.read()) != -1) { fos.write(b); } } } } class MyClose implements AutoCloseable{ //实现AutoCloseable,自动调用close(); public void close() { System.out.println("我关了"); } }
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Demo8_test { public static void main(String[] args) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("图片1.jpg")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.jpg")); int b; while((b = bis.read()) != -1) { bos.write(b ^ 123);//将写出的字节异或上一个数,这个数就是秘钥,解密再异或就行 } bis.close(); bos.close(); } }
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class Demo9_test { public static void main(String[] args) throws IOException { File file = getFile(); //获取文件 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName())); int b; while((b = bis.read()) != -1) { bos.write(b); } bis.close(); bos.close(); } //定义一个方法获取键盘录入的文件路径,并封装成file对象返回 //返回值类型:File 参数列表:无 public static File getFile() { Scanner sc = new Scanner(System.in);//建立键盘录入对象 System.out.println("请输入一个文件的路径:"); while(true) { String line = sc.nextLine(); //接收键盘录入的路径 File file = new File(line); //封装成File对象,并对其判断 if(!file.exists()) { System.out.println("您录入的文件路劲不存在,请从新录入:"); }else if(file.isDirectory()) { System.out.println("您录入的是文件夹路径,请从新录入:"); }else { return file; //弹栈返回路径 } } } }
import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class Demo10_test { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); //建立键盘录入对象 FileOutputStream fos = new FileOutputStream("text.txt");//建立输出流对象,关联text.txt文件 System.out.println("请输入数据:"); while(true) { String line = sc.nextLine(); //将键盘录入的数据存储在line中 if("quit".equals(line)) { break; //遇到quit退出循环 } fos.write(line.getBytes()); //字符串写出必须转换成字节数组 fos.write("\r\n".getBytes()); } fos.close(); } }