仓库源文站点原文

<!--more-->

{% code %} package _8javaio;

import java.io.; import java.nio.charset.StandardCharsets; import java.nio.file.; import java.util.Arrays; import java.util.zip.GZIPInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream;

public class Main { public static byte[] getFileDataAsBytes(File f) { byte[] data = new byte[(int)f.length()]; try(InputStream is =new FileInputStream(f)) { int n; while((n=is.read(data))!=-1) { System.out.println("read"+n+"bytes"); }

    }catch(IOException e)
    {
        e.printStackTrace();
    }
    return data;
}
static void printFiles(File[] files) {
    System.out.println("==========");
    if (files != null) {
        for (File f : files) {
            System.out.println(f);
        }
    }
    System.out.println("==========");
}

public static void main(String[] args) throws Exception{
    //File对象
    File f = new File("..");
    System.out.println(f.getPath());         //构造方法传入路径
    System.out.println(f.getAbsolutePath()); //返回绝对路径
    System.out.println(f.getCanonicalPath());//返回规范绝对路径
    System.out.println(File.separator);      //返回当前平台系统路径分隔符

// File f1 = new File("C:\Windows"); // File f2 = new File("C:\Windows\notepad.exe"); // File f3 = new File("C:\Windows\nothing"); // System.out.println(f1.isFile()); //false 文件 // System.out.println(f1.isDirectory()); //true 目录 // System.out.println(f2.isFile()); //true // System.out.println(f2.isDirectory()); //false // System.out.println(f3.isFile()); //false // System.out.println(f3.isDirectory()); //false

    //文件权限和大小

// System.out.println(f2.canRead()); //是否可读 // System.out.println(f2.canWrite()); //是否可写 // System.out.println(f2.canExecute());//是否可执行 // System.out.println(f2.length()); //文件字节大小

    //创建删除文件
    File file = new File("test/test.txt"); //与src同一级
    if (file.createNewFile()) {
        // 文件创建成功:
        System.out.println("create success");
        System.out.println(file.getAbsolutePath());
        // TODO:
        if (file.delete()) {
            // 删除文件成功:
            System.out.println("delete success");
        }
    }

    //创建临时文件

// File f4 = File.createTempFile("tmp-", ".txt"); // 提供临时文件的前缀和后缀 // f4.deleteOnExit(); // JVM退出时自动删除 // System.out.println(f4.isFile()); // System.out.println(f4.getAbsolutePath());

    //遍历文件和目录

// File f5 = new File("C:Windows"); // // File[] fs1 = f5.listFiles(); // 列出所有文件和子目录 // printFiles(fs1); // File[] fs2 = f5.listFiles(new FilenameFilter() { // 仅列出.exe文件 // public boolean accept(File dir, String name) { // return name.endsWith(".exe"); // 返回true表示接受该文件 // } // }); // printFiles(fs2);

    //创建和删除目录
    new File("hello").mkdir();
    new File("hello/le").mkdirs();
    new File("hello/le").delete();
    new File("hello").delete();


    //Path
    Path p1 = Paths.get(".", "project", "study"); // 构造一个Path对象
    System.out.println(p1);
    Path p2 = p1.toAbsolutePath(); // 转换为绝对路径
    System.out.println(p2);
    Path p3 = p2.normalize(); // 转换为规范路径
    System.out.println(p3);
    File f6 = p3.toFile(); // 转换为File对象
    System.out.println(f6);
    for (Path p : Paths.get("..").toAbsolutePath()) { // 可以直接遍历Path
        System.out.println("  " + p);
    }


    /**InputStream*/
    //字节读文件
    // 创建一个FileInputStream对象:
    File file2 = new File("test/readme.txt");
    file2.createNewFile();
    try (InputStream input = new FileInputStream("test/readme.txt")) {
        int n;
        while ((n = input.read()) != -1) {
            System.out.println(n);
        }
    } // 编译器在此自动为我们写入finally并调用close()


    //缓冲读文件
    try (InputStream input = new FileInputStream("test/readme.txt")) {
        // 定义1000个字节大小的缓冲区:
        byte[] buffer = new byte[1000];
        int n;
        while ((n = input.read(buffer)) != -1) { // 读取到缓冲区
            System.out.println("read " + n + " bytes.");
        }
    }
    //模拟InputStream
    String s;
    byte[] data = { 72, 101, 108, 108, 111, 33 };
    try (InputStream input = new ByteArrayInputStream(data)) {
        int n;
        StringBuilder sb = new StringBuilder();
        while ((n = input.read()) != -1) {
            sb.append((char) n);
            System.out.println((char)n);
        }
        s = sb.toString();
    }
    System.out.println(s);


    /**OutputStream*/
    //一次写入一个字节
    OutputStream output = new FileOutputStream("test/readme.txt");
    output.write(72); // H
    output.write(101); // e
    output.write(108); // l
    output.write(108); // l
    output.write(111); // o
    output.close();

    //一次写入若干字节
    try (OutputStream output1 = new FileOutputStream("test/readme.txt")) {
        output1.write("Hello!".getBytes("UTF-8")); // Hello
    } // 编译器在此自动为我们写入finally并调用close()

    //模拟OutputStream
    byte[] data3;
    try (ByteArrayOutputStream output3 = new ByteArrayOutputStream()) {
        output3.write("Hello ".getBytes("UTF-8"));
        output3.write("world!".getBytes("UTF-8"));
        data3 = output3.toByteArray();
    }
    System.out.println(new String(data3, "UTF-8"));


    //Filter模式
    InputStream file7 = new FileInputStream("test/test.gz");
    InputStream buffered = new BufferedInputStream(file7);
    InputStream gzip = new GZIPInputStream(buffered);
    System.out.println(gzip);
    file7.close();

    /**操作Zip*/
    //读取zip
    try (ZipInputStream zip = new ZipInputStream(new FileInputStream("test/test.zip"))) {
        ZipEntry entry = null;
        while ((entry = zip.getNextEntry()) != null) {
            String name = entry.getName();
            System.out.println("name:"+name);
            if (!entry.isDirectory()) {
                int n;
                while ((n = zip.read()) != -1) {
                    System.out.println(n);
                }
            }
        }
    }
    //写入zip
    try (ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("test/log.zip"))) {
        File ff = new File("log");
        File[] files = ff.listFiles();
        for (File file1 : files) {
            zip.putNextEntry(new ZipEntry(file1.getName()));
            zip.write(getFileDataAsBytes(file1));
            zip.closeEntry();
        }
    }

    /**序列化*/
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    try (ObjectOutputStream output1 = new ObjectOutputStream(buffer)) {
        // 写入int:
        output1.writeInt(12345);
        // 写入String:
        output1.writeUTF("Hello");
        // 写入Object:
        output1.writeObject(Double.valueOf(123.456));
    }
    System.out.println(Arrays.toString(buffer.toByteArray()));


    /**反序列化*/
    ByteArrayInputStream input1 = new ByteArrayInputStream(buffer.toByteArray());
    try (ObjectInputStream input2 = new ObjectInputStream(input1)) {
        int n1 = input2.readInt();
        String s1 = input2.readUTF();
        Double d1 = (Double) input2.readObject();
        System.out.println(n1+s1+d1);
    }


    /**Reader 字符流*/
    //FileReader
    try (Reader reader = new FileReader("test/test.txt")) {
        char[] buffer1 = new char[1000];
        int n;
        while ((n = reader.read(buffer1)) != -1) {
            System.out.println("read " + n + " chars.");
        }
    }
    //CharArrayReader 模拟Reader
    try (Reader reader = new CharArrayReader("Hello".toCharArray())) {
        System.out.println(reader);
    }
    //StringReader
    try (Reader reader = new StringReader("Hello")) {
        System.out.println(reader);
    }
    //InputStreamReader
    try (Reader reader = new InputStreamReader(new FileInputStream("test/test.txt"), "UTF-8")) {
        // TODO:
        System.out.println(reader);
    }

    /**Wirter 字符流*/
    //FileWriter
    try (Writer writer = new FileWriter("test/test.txt")) {
        writer.write('H'); // 写入单个字符
        writer.write("Hello".toCharArray()); // 写入char[]
        writer.write("Hello"); // 写入String
        writer.write("你好");
    }

    //CharArrayWriter
    try (CharArrayWriter writer = new CharArrayWriter()) {
        writer.write(65);
        writer.write(66);
        writer.write(67);
        char[] data4 = writer.toCharArray(); // { 'A', 'B', 'C' }
        System.out.println(data4);
    }

    //StringWriter
    //OutputStreamWriter
    try (Writer writer = new OutputStreamWriter(new FileOutputStream("test/test.txt"), "UTF-8")) {
        // TODO:
        System.out.println(writer);
    }

    /**PrintStream和PrintWriter*/
    System.out.print(12345); // 输出12345
    System.out.print(new Object()); // 输出类似java.lang.Object@3c7a835a
    System.out.println("Hello"); // 输出Hello并换行

    StringWriter buffer4 = new StringWriter();
    try (PrintWriter pw = new PrintWriter(buffer4)) {
        pw.println("Hello");
        pw.println(12345);
        pw.println(true);
    }
    System.out.println(buffer4.toString());

}

} {% endcode %}