zoukankan      html  css  js  c++  java
  • Java IO流简单使用

    Java IO流简单使用

    也许是以前IO方面接触的比较少,我对于读和写的概念老是混淆。 
    趁着现在实习比较闲小结一下,我个人理解读和写都是针对程序,分别就是程序的输入和输出,或者叫读入写出。

    字节流:

    • InputStream
    • OutputStream

    字符流:

    • Writer
    • Reader

    字节流到字符流的转换

    • InputStreamReader
    • OutputStreamWriter 
      (字符到字节: byte[] bs=str.getBytes(“UFT-8”)自己注意编码格式,当然还有很多转换方法)

    File相关的读和写

    实例

    首先File类与文件读写无关,主要是一些文件的属性和一些创建、删除、结构列出等操作 
    创建如下的文件结构,然后列出所有文件和目录。

    1. root 
      • 123.txt
      • child 
        1. 456.txt
    package www.zcs.com;
    import java.io.File;
    import java.io.IOException;
    
    public class FileTest {
    
        public static void main(String[] args) throws IOException, IllegalAccessException {
            File root = new File("E:\test");
            if (!root.exists())
                root.mkdir();
            File file1 = new File("E:\test\123.txt");
            if (!file1.exists())
                file1.createNewFile();
            File file2 = new File("E:\test\child");
            if (!file2.exists())
                file2.mkdir();
            File file11 = new File("E:\test\child\456.txt");
            if (!file11.exists())
                file11.createNewFile();
            listDiretory(root);
        }
    
        /**
         * 列出指定目录下的所有文件和目录
         * 
         * @param dir
         * @throws IllegalAccessException
         */
        public static void listDiretory(File dir) throws IllegalAccessException {
            for (File f : dir.listFiles()) {
                if (f.isFile())
                    System.out.println(f);
                if (f.isDirectory()) {
                    System.out.println(f);
                    listDiretory(f);
                }
            }
        }
    
    }

    输出如图

    Alt text

    File的读写

    下面也包含关于字节和字符的转换

    package www.zcs.com;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class StreamWithRW {
    
        public static void main(String[] args) throws IOException {
            String file = "C:/Users/Administrator/Desktop/stream.txt";
            String charset = "UTF-8";
            FileOutputStream outputStream = new FileOutputStream(file);//默认如果文件存在,则会覆盖。若想在文件里追加内容new FileOutputStream(file,true)
            OutputStreamWriter writer = new OutputStreamWriter(outputStream, charset);
            try {
                writer.write("这是我要写入的中文");
            } finally {
                writer.close();
            }
            // 可以替换成如下代码
            // try{
            // outputStream.write("这是我要写入的中文".getBytes(charset));
            // }finally{
            // outputStream.flush();
            // outputStream.close();
            // }
            FileInputStream inputStream = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(inputStream, charset);
            StringBuffer buffer = new StringBuffer();
            char[] buf = new char[64];
            int count = 0;
            try {
                while ((count = reader.read(buf)) != -1)
                    buffer.append(buf, 0, count);
            } finally {
                reader.close();
            }
            System.out.print(buffer.toString());
        }
    
    }

    小结:

    字节流

    OutputStream本身只能读取一个字节,读一个Int可以通过右移来实现的 

    DataOutputStream:对”OutputStream”功能的扩展,可以更加方便的读取int,long,字符等类型数据 
    writeInt()/writeDouble()/writeUTF()。 

    BufferedOutputStream缓冲读取,大文件时效率更高 

    字符流 
    BufferedReader readLine 一次读一行 
    BufferedWriter/PrintWriter 中write方法不识别换行,需要writeNewLine/println可以识别

    扩展

    对象序列化和反序列化简单使用 
    1、对象序列化就是将Object转换为byte序列,反之叫对象的反序列化 
    2、序列化流(ObjectinputStream)是过滤流—writeobject 反序列化流(ObjectInputStream)–readObject 
    3、序列化接口(Serializable) 
    对象必须实现序列化借口,才能进行序列化 

    把自己创建的一个类序列化写到某个.dat文本里,然后反序列化读出
    package www.zcs.com.ioTest;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    public class SerializedTest {
    
        public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, IOException {
            Student s=new Student(12,"小明");
            String sc="./data/test.dat";
            serializedWrite(s,sc);
            deserializedPrint(sc);
        }
    
        /*
         * 任务: 把自己创建的一个类序列化写到某个.dat文本里,然后反序列化读出
         */
        public static void serializedWrite(Object ob,String sc) {
             try {
                ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(sc));
                out.writeObject(ob);
                out.flush();
                out.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public static void deserializedPrint(String sc) throws FileNotFoundException, IOException, ClassNotFoundException {
            ObjectInputStream  in=new ObjectInputStream(new FileInputStream(sc));
            Student s=(Student)in.readObject();
            s.show();
        }
    }
    
    class Student implements Serializable{
        private int age;
        private String name;
    
        public Student(int age, String name) {
            super();
            this.age = age;
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        public void show(){
            System.out.println(age+"  "+name);
        }
    } 
     
  • 相关阅读:
    python爬虫学习(7) —— 爬取你的AC代码
    python爬虫学习(6) —— 神器 Requests
    python爬虫学习(5) —— 扒一下codeforces题面
    python爬虫学习(4) —— 手刃「URP教务系统」
    听说你叫爬虫(3) —— 模拟登陆
    python爬虫学习(2) —— 爬一下ZOL壁纸
    python爬虫学习(1) —— 从urllib说起
    数据结构/ 串的模式匹配法 / kmp算法与next数组的构造
    ADWORLD web/PHP2
    ADWORLD web/upload1
  • 原文地址:https://www.cnblogs.com/zuochengsi-9/p/6733479.html
Copyright © 2011-2022 走看看