核心类
对象想要被传输, 需要通过序列化来将对象编程 "序列".
字符集对字符流的影响. 字符流底层还是字节流.
分隔符
- public class IOTest {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String path = "C:\\JavaWork\\eclipse-workspace\\MyProject01\\src\\smart_production.JPG";
- String path2 = "C:/JavaWork/eclipse-workspace/MyProject01/src/smart_production.JPG";
- String path3 = "C:" + File.separator + "JavaWork" + File.separator + "eclipse-workspace" + File.separator + "MyProject01" +
- File.separator + "src" + File.separator + "smart_production.JPG";
- System.out.println(path);
- System.out.println(path2);
- System.out.println(path3);
- }
- // 建议, path2 和 path3 都没有问题, 主要建议使用 path2 的方式
- }
输出结果:
遍历文件夹文件
- // 下级名称 list
- File dir = new File("C:/JavaWork/eclipse-workspace/MyProject01/src");
- String[] subNames = dir.list();
- for (String s:subNames) {
- System.out.println(s);
- }
- // 下级对象 listFiles()
- File[] subFiles = dir.listFiles();
- for (File s:subFiles) {
- System.out.println(s.getAbsolutePath());
遍历所有的文件 (子文件夹也遍历), 递归
- File src = new File("C:/JavaWork/eclipse-workspace/MyProject01/src");
- printName(src, 0);
- }
- // 用递归, 非常占用内存
- public static void printName(File src, int deep) {
- System.out.println(src.getName() + " " + deep);
- if (null == src || !src.exists()) {
- return;
- } else if (src.isDirectory()) {
- for (File s:src.listFiles()) {
- printName(s, deep+1);
- }
- }
- }
字符集 & 乱码
编码: 由字符 -> 字节 (2 进制), encode
解码: 有字节 -> 字符 (人能读懂), decode (计算机只认识 0 低电平, 1 高电平 等字节)
"a" 有个代号整数比如 64, 然后转换成 2 进制数, 就编码了 (转换成字节码了). 所以这个代号的集合就是字符集. 同样 "中" 这个字也是可以利用字符集来编码.
- // 编码: 字节数组
- byte[] datas = msg.getBytes(); // 默认使用工程的字符集
- System.out.println(datas.length);
- // 解码: 字符串
- msg = new String(datas, 0, datas.length, "UTF-8");
解码的过程中可能产生乱码: 因为长度不够, 比如 datas.length-2, 或者是字符集跟之前不匹配.
字节流: 处理视频, 音频, Word, Excel 等
字符流: 比如处理纯文本, 也就是说文件本身就是字符的, 那么, 我们不用编码成字节了, 可以直接处理.
02 IO
来源: http://www.bubuko.com/infodetail-3451495.html