java速查笔记

date: 2016.08.04; modification:2016.08.05

目录:

1 系统属性

Java提供的java System.getProperties()方法是获取运行环境的系统参数的

属性 解释
java.version Java 运行时环境版本
java.vendor Java 运行时环境供应商
java.vendor.url Java 供应商的 URL
java.home Java 安装目录
java.vm.specification.version Java 虚拟机规范版本
java.vm.specification.vendor Java 虚拟机规范供应商
java.vm.specification.name Java 虚拟机规范名称
java.vm.version Java 虚拟机实现版本
java.vm.vendor Java 虚拟机实现供应商
java.vm.name Java 虚拟机实现名称
java.specification.version Java 运行时环境规范版本
java.specification.vendor Java 运行时环境规范供应商
java.specification.name Java 运行时环境规范名称
java.class.version Java 类格式版本号
java.class.path 当前类所在的路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
java.compiler 要使用的 JIT 编译器的名称
java.ext.dirs 一个或多个扩展目录的路径
os.name 操作系统的名称
os.arch 操作系统的架构
os.version 操作系统的版本
file.separator 文件分隔符(在 UNIX 系统中是"/")
path.separator 路径分隔符(在 UNIX 系统中是":")
line.separator 行分隔符(在 UNIX 系统中是"/n")
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录

打印上述属性的代码:

System.out.println("Java 运行时环境版本       : " + System.getProperty("java.version"));
System.out.println("Java 运行时环境供应商     : " + System.getProperty("java.vendor"));
System.out.println("Java 供应商的 URL         : " + System.getProperty("java.vendor.url"));
System.out.println("Java 的安装路径           : " + System.getProperty("java.home"));
System.out.println("Java 虚拟机规范版本       : " + System.getProperty("java.vm.specification.version"));
System.out.println("Java 虚拟机规范供应商     : " + System.getProperty("java.vm.specification.vendor"));
System.out.println("Java 虚拟机规范名称       : " + System.getProperty("java.vm.specification.name"));
System.out.println("Java 虚拟机实现版本       : " + System.getProperty("java.vm.version"));
System.out.println("Java 虚拟机实现供应商     : " + System.getProperty("java.vm.vendor"));
System.out.println("Java 虚拟机实现名称       : " + System.getProperty("java.vm.name"));
System.out.println("Java 运行时环境规范版本   : " + System.getProperty("java.specification.version"));
System.out.println("Java 运行时环境规范供应商 : " + System.getProperty("java.specification.vendor"));
System.out.println("Java 运行时环境规范名称   : " + System.getProperty("java.specification.name"));
System.out.println("当前类的格式版本号        : " + System.getProperty("java.class.version"));
System.out.println("当前类所在的路径          : " + System.getProperty("java.class.path"));
System.out.println("加载库时搜索的路径列表    : " + System.getProperty("java.library.path"));
System.out.println("默认的临时文件路径        : " + System.getProperty("java.io.tmpdir"));
System.out.println("要使用的 JIT 编译器的名称 : " + System.getProperty("java.compiler"));
System.out.println("一个或多个扩展目录的路径  : " + System.getProperty("java.ext.dirs"));
System.out.println("操作系统的名称            : " + System.getProperty("os.name"));
System.out.println("操作系统的架构            : " + System.getProperty("os.arch"));
System.out.println("操作系统的版本            : " + System.getProperty("os.version"));
System.out.println("当前操作系统的文件分隔符  : " + System.getProperty("file.separator"));
System.out.println("当前操作系统的路径分隔符  : " + System.getProperty("path.separator"));
System.out.println("当前操作系统的行分隔符    : " + System.getProperty("line.separator"));
System.out.println("用户的当前账户名称        : " + System.getProperty("user.name"));
System.out.println("用户的当前工作目录        : " + System.getProperty("user.dir"));
System.out.println("用户的主目录              : " + System.getProperty("user.home"));

2 文件与文件夹操作

2.1 遍历文件夹例程

为了突出主要内容, 未增加错误处理代码.


    // path: 要访问的路径
    // lastNode: 层次数组, 每递归一次, 在该数组后面增加一个元素,
                 指明被访问的节点是否是本级目录的最后一个节点,
                 用于控制输出内容的前缀及样式. 最外层调用传入{true}.
    public static void tree(String path, boolean lastNode[]) {
        File f = new File(path);
        String prefix = "";
        int level = lastNode.length - 1;

        // Prefix
        for (int i = 1; i < level; i++) {
            if (lastNode[i]) {
                prefix += "    ";
            } else {
                prefix += "|   ";
            }
        }
        if (level > 0) {
            if (lastNode[level]) {
                prefix += "`-- ";
            } else {
                prefix += "|-- ";
            }
        }

        if (f.exists()) {
            String name;
            if (level == 0) {
                name = f.getAbsolutePath(); // 顶级打印绝对路径
            } else {
                name = f.getName();         // 子级只打印名称
            }
            if (f.isDirectory()) {          // 判断是否为文件夹
                System.out.println(prefix + "\033[01;34m" + name + "\033[0m"); // 打印文件夹名
                String flist[] = f.list();  // 获取所有子文件列表
                for (int i = 0; i < flist.length; i++) {
                    String sub = flist[i];
                    boolean lastSubNode;
                    if (i == (flist.length - 1)) {
                        lastSubNode = true;
                    } else {
                        lastSubNode = false;
                    }

                    boolean newLastNode[];
                    int len = 0;
                    newLastNode = new boolean[lastNode.length + 1];
                    System.arraycopy(lastNode, 0, newLastNode, 0, lastNode.length);
                    newLastNode[lastNode.length] = lastSubNode;
                    tree(path + "/" + sub, newLastNode);
                }
            } else {
                System.out.println(prefix + name); // 打印文件名
            }
        } else {
            System.out.println(prefix + path + " does not exist.");
        }
    }

    tree("/tmp/xxx", new boolean[]{true});

3 IO流

3.1 分类

按流向分:

按功能分:

按处理数据分

InputStream, OutputStream, Reader, Writer都是抽象类. 所以不能直接new.

3.2 IO常用类

方向 数据 功能 备注
InputStream(抽象) In 字节 //////
OutputStream(抽象) Out 字节 //////
FileInputStream In 字节 节点流
FileOutputStream Out 字节 节点流
ByteArrayInputStream In 字节 节点流 把数组像文件一样流化
ByteArrayOutputStream Out 字节 节点流 把数组像文件一样流化
------------------------------- ------ -------------- -------- ------------------------------------
BufferedInputStream In 字节 包装流
BufferedOutputStream Out 字节 包装流
DataInputStream In ---- 包装流 可以把基本数据类型与String从流取出
DataOutputStream Out ---- 包装流 可以把基本数据类型与String塞到流中
ObjectInputStream In ---- 包装流 可以把对象从流取出(序列化)
ObjectOutputStream Out ---- 包装流 可以把对象塞到流中(反序列化)(transient)
=============================== ====== ============== ======== ====================================
Reader(抽象) In 字符 //////
Writer(抽象) Out 字符 //////
FileReader In 字符 节点流
FileWriter Out 字符 节点流
------------------------------- ------ -------------- -------- ------------------------------------
BufferedReader In 字符 包装流
BufferedReader Out 字符 包装流
############################### ###### ############## ######## ####################################
InputStreamReader In 字节->字符 包装流 解码
OutputStreamWriter Out 字符->字节 包装流 编码
------------------------------- ------ -------------- -------- ------------------------------------
PrintStream(System.out/err) Out 字节 包装流 打印 (可用System.setOut重定向, FileDescriptor.out定向会来)
InputStream(System.in) Out 字节 包装流 打印(System.out, System.err)