Java I/O流学习笔记(一)

时间:2023-02-14 23:57:50

1. 编码格式的说明

    在开发中我们常遇到的编码格式有GBK,UTF-8,UTF-16be等等。在开发过程中我们需要注意的是:当你的字节序列是某种编码格式时,这个时候你想把字节序列转变成字符串,也需要使用同种编码格式,否则会出现乱码。这里要注意的是: 文本文件,就是字节序列,可以存放任意编码的字节序列,但是如果我们在中文机器上
直接创建文本文件,那么该文本文件只认识ansi编码。  

 1         String s = "天气55";
 2         byte[] bytes = s.getBytes("gbk");
 3         for(byte b:bytes){
 4             /*Integer.toHexString(b&0xff)int是32位,字节流是8位,转换成int时
 5             就是在前面补24个0,但我们不需要前面这些0,所以与上0xff去掉这些0。*/
 6             System.out.print(Integer.toHexString(b&0xff)+"  ");
 7         }
 8         System.out.println();
 9         byte[] bte1 = s.getBytes("utf-16be");
10         for(byte bt:bte1){
11             System.out.print(Integer.toHexString(bt&0xff)+"  ");
12         }
13         System.out.println();
14 //      s.getBytes()转换成字节序列时用的是项目的默认编码,
15 //      我项目的默认编码是UTF-8格式
16         byte[] bte2 = s.getBytes();
17         for(byte bt:bte2){
18             System.out.print(Integer.toHexString(bt&0xff)+"  ");
19         }

输出结果为:

Java I/O流学习笔记(一)

由输出结果可以看出:我们输出同样的内容,但输出结果却不尽相同。GBK编码格式中,中文占两个字节,英文占一个字节;java是双字节编码(UTF-16be),中文占两个字节,英文占两个字节;UTF-8编码格式中,中文占三个字节,英文占一个字节。


2. java.io.File类
    这个类表示文件或目录的信息(名称,大小),但不能访问文件内容。

    在这里我们需要提一下,在创建File对象时,需要写文件路径的。但是路径的表示在Windows平台和Linux平台上它的表示方法是不一样的,在windows操作系统上,文件路径表示是双斜杠,其中一个斜杠表示转义字符Linux操作系统上,文件路径表示反斜杠,为了使java跨平台使用,java内部File类中定义了separator静态成员变量,使用时可以用File.separator使用或者采用静态导入的方法使用 import java.io.File.separator

   2.1 File类中的方法

   

返回值类型 函数名 函数功能
boolean createNewFile() 当且仅当不存在此抽象路径名指定名称的文件时,不可分割地创建一个新的空文件
boolean delete() 删除文件
boolean exists() 判断文件是否存在
String getPath() 将此抽象路径名转换为一个路径名字符串
File getAbsoluteFile() 返回此抽象路径名的绝对路径名形式
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
String getParent() 返回此抽象路径名的父目录路径名字符串,若不存在就返回null
String[] list() 列出当前目录的子目录及文件
File[] listFile() 列出当前目录的子目录及文件的路径
boolean mkdir() 创建此抽象路径指定的目录
boolean mkdirs() 创建此抽象路径指定的目录,包括所有必需但不存在的父目录
boolean isDirectory() 判断是否是一个目录
boolean isFile() 判断是否是一个文件

2.2  方法实现 

列出指定目录下的文件,包括子文件下的文件。(采用递归的方式实现该功能)
 1 public static void listDirectoryFile(File file)throws IOException{
 2         if(!file.exists()){
 3             throw new IllegalArgumentException("文件夹不存在!");
 4         }
 5         if(!file.isDirectory()){
 6              throw new IllegalArgumentException("不是目录!");
 7         }
 8         File[] files = file.listFiles();
 9         if(files!=null&&files.length>0){
10             for(File f:files){
11                 if(f.isDirectory()){
12                     listDirectoryFile(f);
13                 }else{
14                     System.out.println(f.getAbsolutePath());
15                 }
16             }
17         }
18     }
19 public static void main(String[] args)throws Exception {
20         listDirectoryFile(new File("E:\\git"));
21     }