手记

文件传输基础——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();

  • 字节流
    未完待续。。。
1人推荐
随时随地看视频
慕课网APP