博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
io流和序列化
阅读量:4705 次
发布时间:2019-06-10

本文共 9101 字,大约阅读时间需要 30 分钟。

1.使用File操作文件
public class IoTest {    public static void main(String[] args) throws IOException {    /*     01.删除或者创建文件     * File file=new File("e:/io.txt");       addOrDel(file);   */                File file=new File("e:/java/hello");        //file.mkdir();   只能创建一层目录        file.mkdirs();   //同时创建多层目录    }        /**     * 删除或者创建文件     */    public static void addOrDel(File file) throws IOException {        if (!file.exists()) { //判断文件是否存在             if (file.createNewFile()) {//创建成功                System.out.println("创建成功!");                System.out.println("是否是文件:"+file.isFile());                System.out.println("文件名称:"+file.getName());                System.out.println("文件大小:"+file.length());                System.out.println("文件的绝对路径:"+file.getAbsolutePath());            }else {                System.out.println("创建失败");            }        }else {            System.out.println("文件已经存在!");            if (file.delete()) {//删除文件                System.out.println("删除成功!");            }        }    }}
2.使用FileInputStream读取文件内容(字节流)
public class FileInputStreamTest01 {    public static void main(String[] args) throws Exception {        /*         * 创建输入流对象  从电脑中的源文件 获取 数据到 内存中         * 如果没有指定的文件  会报错    FileNotFoundExecption         */        FileInputStream stream=new FileInputStream("e:/hello.txt");        //输出字节数        System.out.println("可读取的字节数:"+stream.available());        /*         * 读取内容         * 循环读取数据,会从输入流中读取一个8位的字节!把它转换成了0-255之间的整数返回了!         * 我们要想拿到具体的值!必须把整数转成字符  char (0-65535)         * read()当读取文件的结尾处  返回-1         * UTF-8 :中的  中文字符以及中文 占据 3个 字节, 数字和字母占1个字节         * GBK,gb2312: 编码中  中文和符号都占2个字节!         */        int num;        while((num=stream.read())!=-1){            System.out.print(num);        }        //关闭输入流        stream.close();    }}
3.使用FileOutputStream写入文件内容(字节流)
public class FileOutputStreamTest02 {    public static void main(String[] args) throws Exception {        /*         * 01.java项目的编码格式 要和输出文件的编码一致 都是UTF-8         * 02.如果系统中没有指定的文件,会默认创建         * 03.如果重复输出,则上次的内容会被覆盖          *   如果不想覆盖!使用重载!在第二个参数的位置输入true         */        FileOutputStream stream=new FileOutputStream("e:/hello.txt",true);        String  str="真的好棒!";        //参数传递需要一个Byte类型的数组        stream.write(str.getBytes());        //关闭输出流        stream.close();    }}
4.使用FileReader读取文件内容(字符流)
public class FileReaderTest03 {    public static void main(String[] args) throws Exception {        //获取当前的编码格式        System.out.println("使用的编码为:"+System.getProperty("file.encoding"));        //创建输入流 Reader        Reader reader=new FileReader("e:/hello.txt");        //因为读取的字符  创建数据的中转站  会有多余的空格产生        char [] words=new char[1024];        int  num;        //需要字符串的 拼接        StringBuilder sb=new StringBuilder();        while((num=reader.read(words))!=-1){            sb.append(words);        }        System.out.println(sb.toString());        //关闭输入流        reader.close();    }}
5.使用BufferedReader读取文件内容(字符流)
public class BufferedReaderTest04 {    public static void main(String[] args) {        /*         * 创建输入流 Reader         * BufferedReader和FileReader联合使用         * 效率高   底层有默认的缓冲区 还可以逐行读取         */                        //创建BufferedReader对象  传递Reader的对象        BufferedReader br=null;        Reader reader=null;        try {            reader = new FileReader("e:/hello.txt");            br=new BufferedReader(reader);            //一行一行的读取            String  line=null;            while((line=br.readLine())!=null){                System.out.println(line);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally{            //关闭流   先开的后关            try {                br.close();                reader.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
6.使用FileWriter读取文件内容(字符流)
public class FileWriterTest05 {    public static void main(String[] args) {        try {            /*             * 输出流  默认的会给我们创建新的文件             * 不使用第二个参数!  那么默认会覆盖之前的内容             * ctrl +shift +t   选中需要查询的类或者接口             */            Writer writer=new FileWriter("e:/hello.txt",true);            writer.write("我爱北京天安门!");            writer.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

7.使用BufferedWriter写入文件(字符流)

public class BufferedWriterTest06 {    public static void main(String[] args) {        try {            //创建输出流对象            Writer writer=new FileWriter("e:/hello.txt",true);            //创建BufferedWriter对象            BufferedWriter bw=new BufferedWriter(writer);            //换行            bw.newLine();            bw.write("北京也爱你!");            bw.newLine();            bw.write("北京也爱你!");            bw.close();            writer.close();                        //获取输入流            Reader reader=new  FileReader("e:/hello.txt");            BufferedReader br=new BufferedReader(reader);            String  line=null;            while((line=br.readLine())!=null){                System.out.println(line);            }            br.close();            reader.close();        } catch (IOException e) {            e.printStackTrace();        }       }}

8.使用InputStreamReader解决中文乱码问题

public class InputStreamReaderTest07 {    public static void main(String[] args) {                BufferedReader br=null;        InputStreamReader isr=null;        InputStream stream=null;        try {            //创建输入流对象            stream=new FileInputStream("e:/hello.txt");            System.out.println("文件的大小:"+stream.available());            //使用InputStreamReader来解决乱码            isr=new InputStreamReader(stream, "utf-8");            //读取             br=new BufferedReader(isr);            String  line=null;            while((line=br.readLine())!=null){                System.out.println(line);            }                    } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally{            try {                br.close();                isr.close();                stream.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
 
 
 
 

9.读取2进制文件

public class DataInputStreamTest08 {    public static void main(String[] args) throws Exception {        //创建输入流         InputStream fis=new FileInputStream("e:/mm.mp3");        //读取2进制文件       DataInputStream dis=new DataInputStream(fis);              //复制文件到另一个目录       OutputStream fos=new FileOutputStream("e:/U1/慢慢.mp3");       //以2进制的方式输出到指定的目录       DataOutputStream dos=new DataOutputStream(fos);               //开始读取       int  data;       while((data=dis.read())!=-1){           //写入           dos.write(data);       }       dos.close();       fos.close();       dis.close();       fis.close();    }
10.序列化和反序列化
/** * 序列化:将内存中对象的状态或者信息  转换成 持久化的过程! * 反序列化:把持久化的对象 变成 内存中的一个对象的过程! *    目的: *      01.使自定义的对象  持久化!对象本身是在内存中的!我们想把它持久化! *      02.把对象从一个地方传递到另一个地方! *      03.使程序具有维护性! *       *  怎么才能实现对象的序列化?? *  1.让对象所属的类  实现Serializable 接口   之后, 这个类 就可以序列化了! *   Serializable:只是一个能否被序列化的标记! */public class Student implements Serializable{  //实体类        private  Integer  id;    private  Integer  age;    private  String  name;        @Override    public String toString() {        return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";    }    public Student() {        super();    }    public Student(Integer id, Integer age, String name) {        super();        this.id = id;        this.age = age;        this.name = name;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        }
 
用于序列化的Student类
public class SerializableTest {    public static void main(String[] args) throws Exception { //序列化操作        //首先实例化一个对象        Student student=new Student(1, 500, "小白2");        //想序列化?从内存中  放入 持久化的介质中  输出流        FileOutputStream  fos=new FileOutputStream("e:/student.txt");        ObjectOutputStream oos=new ObjectOutputStream(fos);        //开始持久化        oos.writeObject(student);        oos.close();        fos.close();    }}
 
序列化
 
/** * 反序列化 * 需要和 序列化时候的包名  一致   不然 没法反序列化 */public class StudentTest {    public static void main(String[] args) throws Exception {        // 从文件中把对象 拿到 内存中 输入流        FileInputStream fis = new FileInputStream("e:/student.txt");        ObjectInputStream ois = new ObjectInputStream(fis);        // 读取文件中的对象        Student student = (Student) ois.readObject();        System.out.println(student.getId());        System.out.println(student.getAge());        System.out.println(student.getName());        ois.close();        fis.close();    }}

转载于:https://www.cnblogs.com/HHR-SUN/p/7039295.html

你可能感兴趣的文章
【JBPM4】判断节点decision 方法3 handler
查看>>
filter 过滤器(监听)
查看>>
node启动时, listen EADDRINUSE 报错;
查看>>
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
python--注释
查看>>
SQL case when else
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
我的第一篇博客
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>