核心类

对象想要被传输, 需要通过序列化来将对象编程“序列”.

字符集对字符流的影响. 字符流底层还是字节流.

分隔符
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 等
字符流: 比如处理纯文本, 也就是说文件本身就是字符的, 那么,我们不用编码成字节了, 可以直接处理.
来源:https://www.cnblogs.com/moveofgod/p/12436718.html