《文件传输基础----Java IO流---《一》》

来源:互联网 发布:stc89c52单片机简介 编辑:程序博客网 时间:2024/06/04 20:12

JAVA  I/O 输入输出流

一、编码问题

编码问题我就以一个程序来为大家解释

package FileIO;

 

public classEncodeDemo {

   

    public static void main(String []args)throws Exception{

        Strings="慕课ABC";

        byte[]bytes1=s.getBytes();//将字符串转化为字节数组  转换成字节序列是项目默认的字节编码(gbk)可以右键查看属性,看到默认编码为gbk

        for(byteb:bytes1){

            //把字节(转化成int)以十六进制的方式显示

            //byte转化为int,其实就是将把后八位前边添上40,让其变成32位,但是前边的240没用,所以没有必要显示出来,所以和oxff1111 1111 )与运算将前边240去掉

            System.out.print(Integer.toHexString(b & 0xff)+" ");//结果中41 42 43分别代表的是A B C

        }

        System.out.println();

        byte[]bytes2=s.getBytes("gbk");

        //由显示结果可以看出,gbk编码中,中文占两个字节,英文占用一个字节

        for(byteb1:bytes2){

            System.out.print(Integer.toHexString(b1 & 0xff)+" ");

        }

        System.out.println();

        byte[]bytes3=s.getBytes("utf-8");//使用utf-8进行转换

        for(byteb2:bytes3){

            System.out.print(Integer.toHexString(b2 & 0xff)+" ");//从运行的结果可以看出

            //utf-8编码中,中文占三个字节,英文占一个字节

        }

        System.out.println();

        //我们一直在说,java是双字节编码(其实是utf-16be编码),就是说java的一个字符能否放一个汉字啊,当然可以,因为默认编码为gbk,一个汉字占两个字节,java又为双字节编码,所以可以

        byte[]bytes4=s.getBytes("utf-16be");

        for(byteb3:bytes4){

            System.out.print(Integer.toHexString(b3 & 0xff)+" ");

            //从运行结果可以看出,中文占两个字节,英文占两个字节

        }

        System.out.println();

        /*

         * 当你的字节序列是某种编码时,这时想把字节序列变成字符串,也必须使用这种编码方式,否则会出现乱码

         */

        Stringstr1=new String(bytes4);//项目的默认编码

        System.out.println(str1);//这样会出现乱码

        Stringstr2=new String(bytes4,"utf-16be");

        System.out.println(str2);//这样就正常输出了

        /*

         * 文本文件就是字节序列

         * 可以是任意字节的编码序列

         * 如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码

         */

    }

}

效果图


二、File类常用API介绍

Java.io.File类常用于表示文件(或目录)

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

下边还是以代码的方式为大家讲解

package FileIO;

 

import java.io.File;

 

public classFileDemo {

   

    public static void main(String[] args) {

        //了解构造函数的情况  可以查看帮助(Alt + /(将光标放在第二个File那儿)

        Filefile=new File("D:\\c++");//这里传进去的是一个目录的路径

        System.out.println(file.exists());//exists():判断文件/文件夹是否存在

        Filefile1=new File("D:\\Java\\ABC");//这里我写的是一个不存在的目录

        //File file1=new File("D:\\Java","ABC");上边的也可以这样写,后边的部分表示该目录下的目录

        System.out.println(file1.exists());

        if(!file1.exists())

            file1.mkdir();//这个函数是说如果该目录不存在,则创建该目录

            //如果创建多级目录,可以用mkdirs()函数

        else

            file1.delete();//若存在则删除该目录

        //判断是否是一个目录如果不是目录或目录不存在,则返回false

        System.out.println(file.isDirectory());

        //判断是否是一个文件

        System.out.println(file.isFile());

        //常用的File对象的API

        System.out.println(file1);//这个是直接打印出的是file.toString()的内容

        System.out.println(file1.getName());//直接打印出名字

        System.out.println(file1.getParent());//得到父目录

        //一些常用的API就说这么多,还有一下,大家可以按照在上边提供的方式查看帮助手册来学习

    }

}

效果图


三、遍历目录

packageFileIO;

 

import java.io.File;

import java.io.IOException;

 

//列出file类的一些常用操作 比如过滤、遍历等  将他们包装成一个工具类以后使用就方便了

public classFileUtils {

/*

 * 列出指定目录下(包括其子目录)的所有文件

     *

     */

    public static void listDirectory(Filedir)throws IOException{//这个throwsIOException其实就是为了防止IO异常

        if(!dir.exists()){

            throw new IllegalArgumentException("目录"+dir+"不存在.");//如果文件不存在则抛出异常

        }

        if(!dir.isDirectory()){//如果不是目录

            throw new IllegalArgumentException(dir+"不是目录");

        }

        /*String[] filenames = dir.list();//这个list()函数返回的是一个字符串数组(返回的是文件的名称直接是子的名称  不包含子目录下的内容

        //list()方法用于列出当前目录下的子目录和文件

        for(Stringstring:filenames){

            System.out.println(string);

        }*/

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

        //也就是说,如果上边的那个list()方法返回的字符串是一个目录的名称,那么我们还需要将其转换成对象,进行递归

        File[]files= dir.listFiles();//返回的是直接子目录(文件)的抽象

        /*for(File file:files){

            //System.out.println(file);//这时候显示的就都是直接子目录的名称(此时名称都已经转换成了对象)

            //而如果我们想将所有子目录下的文件全都拿出来

           

        }这一个for循环是用来测试的*/

        if(files!=null &&files.length>0){

            for(Filefile:files){

                if(file.isDirectory()){

                    //递归

                    listDirectory(file);

                }else{

                    System.out.println(file);

                }

            }

        }

    }

}

然后下边这个是测试类

package FileIO;

 

import java.io.File;

import java.io.IOException;

 

/*

 * 测试类

 */

public classFileUtilTest1 {

   

    public static void main(String[] args)throws IOException {

        FileUtils.listDirectory(new File("D:\\Java"));

    }

}

效果图


0 0
原创粉丝点击