Java中File类和IO流的示例分析

发布时间:2022-03-06 17:16:27 作者:小新
来源:亿速云 阅读:298

这篇文章主要为大家展示了“Java中File类和IO流的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中File类和IO流的示例分析”这篇文章吧。

IO流:

IO流概述:

IO:输入/输出(Input/Output)

:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的, 常见的应用:文件复制;文件上传;文件下载等等,总而言之,涉及到传输的,都涉及到流。

IO流体系图:

Java中File类和IO流的示例分析

Java中File类和IO流的示例分析

既然IO是涉及文件的操作,那么一定离不开文件操作的技术:

File类:

File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些方法来操作文件,主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。

File 类表示处理文件和文件系统的相关信息。File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。所以和IO搭配在一起进行读出和写入的操作。

先看一张File类常用的方法总汇图:

Java中File类和IO流的示例分析

使用createNewFile()创建一个文件:

public class test01 {
    public static void main(String[] args) throws IOException {
		//先建立一个File对象,并传入路径
        File file1 = new File("G://abc.txt");
        //创建空文件,如果没有存在则新建一个,并且返回True,如果存在了就返回false
        System.out.println(file1.createNewFile());   
}

如果执行后,该目录没有这个文件,那么会创建一个,并且返回true,如果已经存在了,就会返回false,代表创建失败。

Java中File类和IO流的示例分析

使用mkdir()创建一个目录:

File file2 = new File("G://a");
	System.out.println(file2.mkdir());   
//创建一个目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false

使用mkdirs()创建多级目录:

File file3 = new File("G://a//b//c");
        System.out.println(file3.mkdirs());   
//创建多级目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false

Java中File类和IO流的示例分析

接着我们需要使用IO流里面的功能对文件进行输入和输出:

先介绍四个常用的流:

为什么会有字节和字符两种流呢?

ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。

UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。

Unicode 编码中,一个英文为一个字节,一个中文为两个字节。

所以我们知道计算机读取数据是一个一个的读取,当文件里面是数字或者英文的时候,因为都占了一个字节,所以可以正常读取出来。
那么如果是汉字呢?最少也占了两个字节,如果把一个汉字拆分读取,显示出来肯定是有问题的。

小结:如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果你不知道该使用哪种类型的流,就使用字节流!

下面是四种流对应功能的方法名总汇表:

Java中File类和IO流的示例分析

字节输出流:

我们使用字节输出流给abc.txt文件里面写一句话:

public class test01 {
    public static void main(String[] args) {
        try{
              //创建输出流对象:
            OutputStream fos = null;
            fos = new FileOutputStream("G://abc.txt");
            String str = "今天的博客是IO流";
            //先将需要写入的字符打散成数组:
            byte[] words = str.getBytes();
            //使用写入的功能
            fos.write(words);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行后:

Java中File类和IO流的示例分析

字节输入流(从文件读取到控制台):

我们知道如果文件内是汉字,使用字节输入流,那么显示的肯定是乱码,如果现在文件里面是“我爱中国”这四个字,使用下面这段代码:

public class test02 {
    public static void main(String[] args) {
        //创建字节输入流对象:
        InputStream fis = null;
        try{
            fis = new FileInputStream("G://abc.txt");
            int data;
            //fis.read()取到每一个字节通过Ascll码表转换成0-255之间的整数,没有值返回-1
            while((data=fis.read())!=-1){
                //(char) data 将读到的字节转成对应的字符
                //中文的字符是2+个字节组成
                System.out.print((char) data);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try{
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

输出的结果是:

Java中File类和IO流的示例分析

然后把文件内信息换成英文和数字:

Java中File类和IO流的示例分析

结论:有汉字的文件读取不能用字节流

字符输出流:

我们使用字符输出流给abc.txt文件里面写几句话:

public class test03 {
    public static void main(String[] args) {
        try{
            //使用字符输出流的FileWriter写入数据
            Writer fw = new FileWriter("G://abc.txt");
            fw.write("我们在学Java");
            fw.write("一起加油");
            fw.close(); //关闭资源
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Java中File类和IO流的示例分析

也没用问题,我们发现,使用字符流写中文汉字更方便。

字符输入流:

可以设置缓存流提高获取值的效率:

public class test04 {
    public static void main(String[] args) throws IOException {
        //创建字符输入流对象:
        Reader fr = null;
        try{
            fr = new FileReader("G:/abc.txt");
            //借助字符流对象创建了字符缓存区 把字符一个一个的取到后先放到缓存区
            //然后一起再读写到程序内存来,效率更高
            BufferedReader br = new BufferedReader(fr);
            //先去缓存区一行一行的读取
            String line = br.readLine();
            while(line != null){
                System.out.println(line);
                line = br.readLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

当文件内的信息为多行的时候:

Java中File类和IO流的示例分析

字节流和字符流总结:

以上是“Java中File类和IO流的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. java中File类怎么用
  2. IO流-File类

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java file类 io流

上一篇:Python和Matlab怎么实现蚂蚁群算法求解最短路径

下一篇:Python如何实现蚁群算法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》