文件传输基础——JavaIO流回顾笔记
- 编码
项目默认编码gbk,中文占用两个字节,英文占用一个字节。String s = "a string"; byte[] bytes = s.getBytes(); //转换成int,以十六进制形式显示 for(int i = 0; i < bytes.length; ++i) { System.out.println(Integer.toHexString(b & 0xff)); }
utf-8编码,中文占用三个字节,英文占用一个字节。
byte[] bytes2 = s.getBytes("utf-8);
Java是双字节编码,utf-16be,中文占用两个字节,英文占用一个字节。
把字节序列转换成字符串需采用对应的编码,否则会出现乱码问题。
文本文件就是字节序列,可以使用任意编码。
若在中文机器上创建文本文件,默认以ansi编码形式保存。
中文系统下,ansi编码代表gbk编码。
- java.io.File类
用于表示文件(目录)
只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问。
//构造函数
File file = new File(String pathName)
//其他可参考eclipse提示,或查阅api
//一些方法
if(!file.exists())
file.mkdir(); //创建一个目录
else
file.delete();
System.out.println(file.isDirectory());
System.out.println(file.isFile());
File file2 = new File(String parent, String child);
if(!file2.exists())
file2.createNewFile();
else
file2.delete();
//其他,参考eclipse提示,或查阅api
遍历一个目录
public void listDirectory(File dir) throws IOException {
if(!dir.exists())
throws new IllegalArgumentException("directory: " + dir + " is not exist.");
if(!dir.isDirectory)
throws new IllegalArgumentException(dir + " is not a directory.");
File[] files = dir.listFiles();
if(files != null && files.length > 0) {
for(File file : files) {
if(file.isDirectory())
listDirectory(file);
else
System.out.println(file);
}
}
}
- java.io.RandomAccessFile
Java提供的对文件内容的访问,可读写。
打开文件,有两种模式”rw”, “r”
RandomAccessFile raf = new RandomAccessFile(file, "rw");
//文件指针位置,打开文件时,指针在开头,pointer = 0.
System.out.println(raf.getFilePointer());
//只写一个字节(后八位),同时指针指向下一个位置,准备再次写入。
raf.write(int);
//一次只读一个字节
int b = raf.read();
//直接写一个int
raf.writeInt(int);
byte[] bytes = s.getBytes();
raf.write(bytes);
//读文件时,把指针移到头部
raf.seek(0);
//一次性读取到字节数组中
byte[] buf = new byte[(int) raf.length()];
raf.read(buf);
//文件读写完之后一定要关闭
raf.close();
- 字节流
未完待续。。。
相关文章