zoukankan      html  css  js  c++  java
  • java IO流

      1 package com.sun.io;
      2 
      3 import java.io.BufferedOutputStream;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.IOException;
      8 import java.io.InputStream;
      9 import java.io.ObjectInputStream;
     10 import java.io.ObjectOutputStream;
     11 import java.io.SequenceInputStream;
     12 import java.io.Serializable;
     13 import java.util.Enumeration;
     14 import java.util.Vector;
     15 
     16 import org.junit.Test;
     17 
     18 public class IODemo {
     19     @Test
     20     public void createFile() throws IOException {
     21         // File f = new File("D:/eadp1.txt"); 和下面的效果相同
     22         File f = new File("D:\eadp1.txt");
     23         // 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。API
     24         // 该目录下没有此文件则创建,创建成功返回true,如果存在返回false;如果目录是不存在的话那会抛出IO异常
     25         System.out.println(f.createNewFile());
     26         System.out.println("该分区大小" + f.getTotalSpace() / (1024 * 1024 * 1024) + "G"); // 返回由此抽象路径名表示的文件或目录的名称。
     27         f.mkdirs(); // 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
     28         // f.delete(); // 删除此抽象路径名表示的文件或目录
     29         System.out.println("文件名  " + f.getName()); // 返回由此抽象路径名表示的文件或目录的名称。
     30         System.out.println("文件父目录字符串 " + f.getParent());// 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回
     31     }
     32 
     33     @Test
     34     public void fileInputStream() throws IOException {
     35         int count = 0;
     36         InputStream streamReader = new FileInputStream(new File("D:\eadp1.txt"));
     37         byte[] b = new byte[(int) new File("D:\eadp1.txt").length()];
     38         System.out.println("---长度是: " + b.length + " 字节");
     39         while (streamReader.read() != -1) { // 读取文件字节,并递增指针到下一个字节
     40             count++;
     41         }
     42         System.out.println("---长度是: " + count + " 字节");
     43         streamReader.close();
     44     }
     45 
     46     @Test
     47     public void copyFile() throws IOException {
     48         // TODO自动生成的方法存根
     49         byte[] buffer = new byte[512]; // 一次取出的字节数大小,缓冲区大小
     50         int numberRead = 0;
     51         FileInputStream input = null;
     52         FileOutputStream out = null;
     53         input = new FileInputStream("D:\eadp1.txt");
     54         out = new FileOutputStream("D:\eadp.txt"); // 如果文件不存在会自动创建
     55 
     56         while ((numberRead = input.read(buffer)) != -1) { // numberRead的目的在于防止最后一次读取的字节小于buffer长度,
     57             out.write(buffer, 0, numberRead); // 否则会自动被填充0
     58         }
     59         System.out.println("成功");
     60         input.close();
     61         out.close();
     62     }
     63 
     64     /**
     65      * 可以看我另一篇博客java序列化 把数据存到数据库中
     66      * 
     67      * @throws IOException
     68      * @throws ClassNotFoundException
     69      */
     70     @Test
     71     public void copyObject() throws IOException, ClassNotFoundException {
     72 
     73         ObjectOutputStream objectwriter = new ObjectOutputStream(new FileOutputStream("D:\student.txt"));
     74         objectwriter.writeObject(new Student("gg", 22));
     75         objectwriter.writeObject(new Student("tt", 18));
     76         objectwriter.writeObject(new Student("rr", 17));
     77         ObjectInputStream objectreader = new ObjectInputStream(new FileInputStream("D:\student.txt"));
     78         for (int i = 0; i < 3; i++) {
     79             System.out.println(objectreader.readObject());
     80         }
     81         objectreader.close();
     82         objectwriter.close();
     83     }
     84 
     85     /**
     86      * 合并流
     87      * 
     88      * @throws IOException
     89      */
     90     @Test
     91     private void doSequence() throws IOException {
     92         // 创建一个合并流的对象
     93         SequenceInputStream sis = null;
     94         // 创建输出流。
     95         BufferedOutputStream bos = null;
     96         // 构建流集合。
     97         Vector<InputStream> vector = new Vector<InputStream>();
     98         vector.addElement(new FileInputStream("D:	ext1.txt"));
     99         vector.addElement(new FileInputStream("D:	ext2.txt"));
    100         vector.addElement(new FileInputStream("D:	ext3.txt"));
    101         Enumeration<InputStream> e = vector.elements();
    102         sis = new SequenceInputStream(e);
    103         bos = new BufferedOutputStream(new FileOutputStream("D:	ext4.txt"));
    104         // 读写数据
    105         byte[] buf = new byte[1024];
    106         int len = 0;
    107         while ((len = sis.read(buf)) != -1) {
    108             bos.write(buf, 0, len);
    109             bos.flush();
    110         }
    111     }
    112 }
    113 
    114 class Student implements Serializable {
    115     private static final long serialVersionUID = 1L;
    116     private String name;
    117     private int age;
    118 
    119     public Student(String name, int age) {
    120         super();
    121         this.name = name;
    122         this.age = age;
    123     }
    124 
    125     @Override
    126     public String toString() {
    127         return "Student [name=" + name + ", age=" + age + "]";
    128     }
    129 }

    这里有个问题,对象的序列化是方便了我们去操作多个类(对象存在字段中),但是如果是数据迁移的话这些二进制数据就完全失去了作用,那是否考虑存为json

    呢,其实这种方法也不好,解析json也是个复杂的过程,最好的方式还是对象!当然这也因需求而异

  • 相关阅读:
    mac下配置adb环境变量
    Flutter——多行文字展开收起
    sourceTree报错:Updates were rejected because the tag already exists in the remote.
    股市赚钱就是这么简单
    鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)
    Mybatis、Mybatis Generator、Mybatis-Plus、Mybatis Plus Generator
    鸿蒙运行报错:Failure[INSTALL_PARSE_FAILED_USESDK_ERROR] Error while Deploying HAP
    MAC 下Android ROM 提取文件
    IDAPython 插件开发
    Android ollvm 集成
  • 原文地址:https://www.cnblogs.com/sun-space/p/5665238.html
Copyright © 2011-2022 走看看