输入流与输出流

    技术2023-12-05  91

    Java I/O Input 输入–>读取 input 把外部数据输入到程序中,类似于上传 Output 输出–>写入 outinpput 把程序中的数据输出到磁盘等外部的存储空间上,类似于下载

    JAVA API :java.io.File 类 File file = new File(); 特有的方法有: .mkdir()创建文件夹 lastModified()最后获取的时间 如何读写文件?

    通过流来读写文件 流是一组有序的数据序列 以先进先出方式发送信息的通道 Java流的分类 I/O流: 使用FileInputStream 读文本文件步骤: 1.引入相关的类 2.构造文件输入流FileInputStream 对象 3.读取文件的数据 4.关流 FileInputStream 输入流: 父类 InputStream类常用方法 子类 1.int read( ) 2.int read(byte[] b) 3.int read(byte[] b,int off,int len) 4.void close( ) 5.int available():可以从输入流中读取的字节数目 子类FileInputStream常用的构造方法 FileInputStream(File file) FileInputStream(String name)

    FileInputStream fis=null; fis =new FileInputStream(“D:”+File.separator+“Text”+File.separato+“test.java”);//文件夹的位置D:\Text\test.java StringBuffer s=new StringBuffer(); byte[] b=new byte[1];//一个字一个字的读 while(fis.read(b)!=-1){//将读的字节存到数组中 String str=new String(b);//将字节数组中的数据转为字符串 s.append(str);//追加字符 System.out.println(s); fis.close();

    使用FileOutputStream 读文本文件步骤: 1.引入相关的类 2.构造文件输入流FileOutputStream 对象 3.读取文件的数据 4.关流

    FileOutputStream输出流:** 父类** OutputStream类常用方法:子类 void write(int c) void write(byte[] buf) void write(byte[] b,int off,int len) void close() void flush():强制把缓冲区的数据写到输出流中 子类FileOutputStream常用的构造方法 FileOutputStream (File file) FileOutputStream(String name) FileOutputStream(String name,boolean append) 1.前两种构造方法在向文件写数据时将覆盖文件中原有的内容 2.创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

    FileOutputStream fos=null; fos=new FileOutputStream(“D:”+File.separator+“Text”+File.separator+“test.java”,true); String str=“我是一颗海草海草”; byte[] b=str.getBytes();//将字符串转为字节数组 fos.write(b); fis.close();

    将文件从D盘复制到另一个盘: FileInputStream fis=null; FileOutputStream fos=null; fis =new FileInputStream(“D:”+File.separator+“tt.jpg”); fos=new FileOutputStream(“E:”+File.separator+“tt.jpg”); byte[] b=new byte[1024]; int len; while((len=fis.read(b))!=-1){ fos.write(b,0,len); } 关闭流

    字符流: 输入流: Reader InputStreamReader,指定编码格式 FileReader,是InputStreamReader的子类,不能指定编码格式 BufferedReader 字符缓冲流(字符缓冲区,读取一行数据) 使用字符流读文件: 使用InputStreamReader 和 BufferedReader读取文件 输出流:

    字符输入流: Reader --> InputStreamReader --> FileReader --> BufferedReader 父类 解决出现乱码,指定编码格式 带缓冲区的类提高读取的效率

    方法: read() readLine()

    字符输出流: Writer --> OutputStreamWriter --> FileWriter --> BufferedWriter 父类 解决写入程序时出现乱码,指定编码格式 带缓冲区的类提高读取的效率

    方法: writer() newLine() //换行

    读取二进制文件 DataInputStream类 FileInputStream的子类 与FileInputStream类结合使用读取二进制文件 DataOutputStream类 FileOutputStream的子类 与FileOutputStream类结合使用写二进制文件

    FileInputStream fis=new FileInputStream(“C:\HelloWorld.class”); DataInputStream dis=new DataInputStream(fis); dis.read (); dis.close();

    序列化和反序列化的过程 序列化是 将对象的状态写入到特定的流中的过程 反序列化则是 从特定的流中获取数据重新构建对象的过程

    序列化的步骤: 1.实现Serializable接口 2.创建对象 3.调用writeObject()方法将对象写入文件 4.关闭对象输出流

    **注意:**使用集合保存对象,可以将集合中的所有对象序列化 反序列化的步骤和序列化步骤一样。 如: FileOutputStream fos=null; ObjectOutputStream oos=null; try { fos=new FileOutputStream(“D:”+File.separator+“dog.info”); oos=new ObjectOutputStream(fos); Dog dog=new Dog(“大黄”,“土狗”); oos.writeObject(dog);

    } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { oos.close(); fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

    **需要注意的:**如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时,必须按照写入的顺序读取

    Processed: 0.012, SQL: 9