最近观看了关于java 输入输出流的视频,在此做一下总结:

1、在我们平常使用的window电脑中,编码格式是ANSI,如果创建一个文本文件设置为UTF-8格式,中文会造成乱码;

2、将字符串转换为字节序列,利用的是默认的编码,一般是gbk

String s="我是lyt";
byte[] bytes=s.getBytes();

3、把字节转换为int 以16进制表示:可以用方法

Integer.toHexString(b & 0xff +"");

4、常见编码中英文占用字节数

gbk编码—-中文占2个字节,英文占用1个字节
utf-8编码—中文占3个字节,英文占用1个字节
java是双字节编码,java一个字符占两个字节,使用utf-16be
utf-16be —-中文占2个字节,英文占用2个字节

因此当字节序列是某种编码时,转换为字符串的时候也要用这种编码格式,否则会出现乱码,
byte数组如果是utf-8编码,那么转换为字符串时也要用utf-8编码

String str=new String(byte,"utf-8");

5、文本文件就是字节序列,可以是任意编码的字节序列;
如果在中文机器上,直接创建文本文件,只能放ANSI;
联、联通这两个词乱码纯属巧合,因为它们正好符合了utf-8编码规则。

6、java.io.file类用于表示文件或目录

File类只用于表示文件(目录)的信息(名称、大小)等,不能用于文件内容的访问

File file=new File("e:\\java\\io"); //创建file对象

file.exists(); //判断目录是否存在

if(!file.exists()){ //如果目录不存在
    file.mkdir();  //创建目录     如果创建多级目录   file.mkdirs();
}
else{
    file.delete();  //删除目录
}

file.isDirectory();//判断是否是一个目录

file.isFile();//判断是否是一个文件

7、 判断文件是否存在,不存在创建文件,存在删除文件,代码如下:

public class FileTest {

    public static void main(String[] args) {
        File file2= new  File("E:\\java\\io\\a.txt");//方式1

        File file3=new File("E:\\java\\io","a.txt");//方式2
        if(!file2.exists()){
            try {
                file2.createNewFile();  //此处有异常  捕捉一下
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else{
            file2.delete();
        }
    }
}

8、列出常用操作,过滤、遍历

public class FileUtils {

    /**
     * 列出指定目录下的(包括子目录的)所有文件
     * @param dir
     * @throws IOException
     */
    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 s:fileNames){
//            System.out.println(dir+"\\"+s);
//        }

        //如果要遍历子目录下的内容就需要构造成File对象做递归操作,File提供了直接返回File对象的APi

        File[] files=dir.listFiles();//返回的是直接子目录的抽象
//        for(File file:files){
//            System.out.println(file);
//        }
        if(files!=null&&files.length>0){
            for(File file:files)
                if(file.isDirectory()){
                    listDirectory(file); //递归
                }
                else{
                    System.out.println(file);
                }


        }
    }
}
public class FileTest {

    public static void main(String[] args) throws IOException{
        FileUtils.listDirectory(new File("D:\\JiaKaoBaoDian"));
    }
}