-
gbk编码中汉字占2个字节
utf-8编码中汉字占3个字节
查看全部 -
右击项目 -> 查看properties 查看项目默认编码方式
查看全部 -
FileReader/FileWriter 跟InputStreamReader/OutputStreamWriter有点像
共同点:
都是以char为单位实现
底层都是字节单位实现
不同点:
优:比InputStreamReader/OutputStreamWriter简单一点
缺:不能指定编码格式读取
代码解析:
//批处理(单字符处理没写)
FileReader fr = new FileReader("F:\\java\\demo\\FrAndFw1.txt");
FileWriter fw = new FileWriter("F:\\java\\demo\\FrAndFw2.txt");//简便在这里,但是无法指定编码格式
char[] c1 = new char[8 * 1024];
int c;
while ((c = fr.read(c1, 0, c1.length)) != -1) {
fw.write(c1, 0, c);
fw.flush();
}
fr.close();
fw.close();
查看全部 -
2.字符流
1)编码问题
2)文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件:byte byte byte..一个字节一个字节的数据序列
文本文件:按照某种编码格式(utf-8,utf-16be,gbk),几个byte几个byte存的存储结构
3)字符流(reader writer)---->操作的大部分都是文本文件
一次处理一个字符
底层仍然是基本的字节序列,一个字节一个字节的处理
字符流的基本实现:
InputStreamReader 把读取的byte按照编码格式转化为char
OutputSreamWriter 把读取的Char转化为byte写入
代码解析:
FileInputStream fis= new FileInputStream("F:\\java\\demo\\utf-8-1.txt");
FileOutputStream fos= new FileOutputStream("F:\\java\\demo\\utf-8-2.txt");
// 如果没有特别指明,默认使用的编码格式是项目默认的编码格式
//new InputStreamReader(fis,"gbk");默认编码格式 ,与项目的编码格式相同
//"gbk"一般不显示出来,是默认的,如果读取的文本编码格式不一样,就要用相应的编码格式读取
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
//单char处理:
//int c;
// while((c=isr.read())!=-1) {
// System.out.print((char)c);
// }
// 批量处理,读取0到c2.length长度的数据放入到c2中,c用来接收放入了多少个数据
int c;
char[] c2 = new char[8 * 1024];
while ((c = isr.read(c2, 0, c2.length)) != -1) {
String c3 = new String(c2, 0, c);//
System.out.print(c3);
osw.write(c2, 0, c);
osw.flush();
}
isr.close();
查看全部 -
查看全部
-
.ListFiles(); 返回子文件目录的数组
查看全部 -
read(buf, 0, buf.length)
查看全部 -
最外层if加个else 空目录也能打印出来
package com.imooc.io;
import java.io.File;
import java.io.IOException;
public class FileUtils {
//列出File的一些常用操作,比如过滤、遍历等操作
public static void listDirectory(File dir)throws IOException {
if(!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if(!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
// String[] filenames = dir.list();//返回的是字符串数组,直接子目录名称,不包含子目录下的内容
// for(String string : filenames) {
// System.out.println(string);
// }
//如果要遍历子目录下的类容,就需要构造成File对象进行递归操作
//File提供了直接返回File对象的API
File[] files = dir.listFiles();//返回的是直接子目录的(文件 )的抽象
if(files != null && files.length > 0)
for (File file : files) {
if(file.isDirectory()){
//递归
listDirectory(file);
}else {
System.out.println(file);
}
}
else
System.out.println(dir);
}
}
查看全部 -
4
查看全部 -
3
查看全部 -
2
查看全部 -
1
查看全部 -
4
查看全部 -
3
查看全部 -
2
查看全部
举报