• JAVA IO 总结


    关于 java io 主要是 对 文件 的输入和 输出 方面的东西,因此,我进行系统的学习

    主要有这几个 关键的类 File   FileInputStream   FileOutputStream   InputStreamReader   OutputStreamWriter  BufferedReader BufferedWriter  BufferedInputStream  BufferedOutputStream

     以下我坐下详细的介绍:

     File 类是最基本的 文件类

    可以获取文件的基本属性.

    import java.io.File;
    import java.io.IOException;
    
    public class Test01 {
    
    	public static void main(String[] args) throws IOException {
    
    		File file = new File("d:"+File.separator+"io"+File.separator+"写给新手程序员的一封信.txt");
    
    		if (!file.exists()) {
    			file.createNewFile();
    			System.out.println("文件已创建");
    			System.out.println("名称:" + file.getName());
    			System.out.println("相对路径:" + file.getCanonicalPath());
    			System.out.println("绝对路径:" + file.getAbsolutePath());
    			System.out.println("文件大小:" + file.length());
    			if (file.delete()) {
    				System.out.println("文件已删除!");
    			}
    
    		}
    
    	}
    
    }
    

     FileInputStream   和 FileOutputStream 用这两个可以输出相应的文本文件内容,使用 InputStreamReader 和 OutputStreamWriter 来输入和输出文件流,也可以用来转换编码方式,这样可以使输出的文件不乱码.

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class Test02 {
        public static void main(String[] args) {
    
            String src = "D:" + File.separator + "io" + File.separator
                    + "hello.txt";
            String dest = "D:" + File.separator + "io" + File.separator + "out"
                    + File.separator + "hello.txt";
    
            FileInputStream in = null;
            FileOutputStream out = null;
    
            File path = new File(dest);
            try {
                if (!path.exists()) {
                    path.createNewFile();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            try {
                in = new FileInputStream(src);
                out = new FileOutputStream(dest);
                InputStreamReader is = new InputStreamReader(in, "GBK");
                OutputStreamWriter os = new OutputStreamWriter(out, "GBK");
                // 读取文件内容
                // byte[] buf = new byte[1024];
                // int len =0;
                // while((len = in.read(buf))!=-1){
                // System.out.println(new String(buf,0,len));
                // }
    
                char[] buf = new char[1024];
                int len = 0;
                while ((len = is.read(buf)) != -1) {
                    // System.out.println(new String(buf,0,len));
                    os.write(new String(buf, 0, len));
                    os.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    使用 BufferedReader 和 BufferedWriter 来使用缓冲区读取 或者写入内容

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class Test03 {
        public static void main(String[] args) {
            String src = "D:" + File.separator + "io" + File.separator + "pet.txt";
            String dest = "D:" + File.separator + "io" + File.separator
                    + "pets.txt";
    
            //FileReader fr = null;
            //FileWriter fw = null;
    
            File path = new File(dest);
            if (!path.exists()) {
                try {
                    path.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            BufferedReader br = null;
            BufferedWriter bw = null;
    
            try {
                //fr = new FileReader(src);
               // fw = new FileWriter(dest);
    
                // 进行转码
                br = new BufferedReader(new InputStreamReader(new FileInputStream(
                        src), "GBK"));
                bw = new BufferedWriter(new OutputStreamWriter(
                        new FileOutputStream(path), "GBK"));
    
                String str = null;
    
                System.out.print("替换前:");
                char[] ch = new char[1024];
                int temp = 0;
                while ((temp = br.read(ch)) != -1) {
                    str = new String(ch, 0, temp);
                    System.out.println(str);
                }
    
                System.out.print("替换后:");
                String name = "欧欧", type = "狗狗", master = "范范";
    
                String one = str.replace("{name}", name);
                String two = one.replace("{type}", type);
                String there = two.replace("{master}", master);
    
                System.out.println(there);
    
                bw.write(there);
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (bw != null) {
                    try {
                        bw.close();
                        fw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    使用 FileInputStream 和 FileOutputStream 用于二进制文件的读取和输入 ,也可以使用缓冲区进行 BufferedInputStream 和 BufferedOutputStream 二进制文件的读取和输出

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Test04 {
    
        public static void main(String[] args) {
    
            // windows 下添加 \ linux 下添加 
            String src = "d:" + File.separator + "io" + File.separator + "1.jpg";
            String dest = "d:" + File.separator + "io" + File.separator + "out"
                    + File.separator + "1.jpg";
    
            FileInputStream i = null;
            FileOutputStream o = null;
    
            BufferedInputStream bi = null;
            BufferedOutputStream bo = null;
    
            try {
    
                i = new FileInputStream(src);
                o = new FileOutputStream(dest);
                bi = new BufferedInputStream(i);
                bo = new BufferedOutputStream(o);
    
                byte[] buf = new byte[1024];
                int temp = 0;
                while ((temp = bi.read(buf)) != -1) {
                    bo.write(buf, 0, temp);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (bi != null) {
                    try {
                        bi.close();
                        i.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (bo != null) {
                    try {
                        bo.close();
                        o.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    }

    另外在进行 char[] 和 byte[] 数组进行读取数据的时候,char[] 大部分时候用于文本内容的读取 而byte[] 用于 二进制文件的读取

    //这部分代码在 Test03 中
    char[] ch = new char[1024];
        int temp = 0;
        while ((temp = br.read(ch)) != -1) {
        str = new String(ch, 0, temp);
        System.out.println(str);  
    }
    
    //这部分代码在 Test04 中
    byte[] buf = new byte[1024];
        int temp = 0;
            while ((temp = bi.read(buf)) != -1) {
            bo.write(buf, 0, temp);
    }

    总结的大概就这么多,另外还有好几种其他的 读取文件内容的方式,详情请看这篇文章:

    http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.html

  • 相关阅读:
    序列化结构体字段顺序 按照结构体的某个字段排序
    《领域驱动设计》:从领域视角深入仓储(Repository)的设计和实现
    操作系统上的进程 (最小 Linux; fork, execve 和 exit)
    PPM文件格式 Portable Pixmap Format)
    深度 | 字节跳动微服务架构体系演进
    Go 与 C 的桥梁:cgo 入门,剖析与实践
    您的时钟快了 建立私密连接
    os.Exit(123)
    在终端中显示图像
    StampedLock内部是基于CLH锁实现的,CLH是一种自旋锁,能够保证没有“饥饿现象”的发生,并且能够保证FIFO(先进先出)的服务顺序。
  • 原文地址:https://www.cnblogs.com/fengyeyang/p/4886642.html
Copyright © 2020-2023  润新知