zoukankan      html  css  js  c++  java
  • 《Java从入门到放弃》JavaSE入门篇:文件操作

    Java中的文件操作还有点小复杂···

    不过没关系,我会把它讲得很简单,嘿嘿嘿!!!j_0020.gif

    在讲Java中的文件操作前,先了解一个概念——“流”,比如我们把一个杯子的水倒到另一个同样大小的杯子,就是以流的方式处理的(如果你把水冻成冰了再整个放进去就当我没说吧 - -)。

    其实我的理解很简单,“流”就是一串数据,至于这一串数据中每个数据单元有多大,Java中提供了两种处理方法:字节流和字符流

    无论是字节流还是字符流,根据处理方式又可以分为输入流和输出流。这一篇,我们就来简单学学字节流和字符流的输入和输出。

    一、字节流

        字节都知道吧?

        什么?不知道!!!好吧,不知道就不知道吧,那就简单说说,计算机保存数据的最小单位是bit(位),这是一个二进制单位,它的值只有0和1。

        一个字节就是一个Byte(注意这是大B,那个是小b),一个字节占8bit的大小。像现在的操作系统有什么32位啊64位啊,主要就是处理数据的时候有区别,32位的每次处理的最小单位是4个字节,而64的是8个字节。具体还有很多区别之处,这儿我们就没必要细说了。如果感兴趣的话,那就百度走起!!!

        其实文件操作很简单,跟赵本山小品中把大象放进冰箱的步骤是一样一样滴。

        第一步:打开冰箱门

        第二步:把大象放进去(或者拿出来)

        第三步:关闭冰箱

        就这三步,是不是超级简单啊!!!j_0028.gif

        因为无论读文件还是写文件的步骤都一样,只不过使用的类不一样,所以我们直接来看看如何复制文件吧。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /**
     * 字节流方式复制文件(任何文件都可以复制)
     * @param oldFile 被复制文件
     * @param newFile 复制后的文件
     */
    public static void copyFile(String oldFile, String newFile){
        File srcFile = new File(oldFile);   //源文件对象
        File destFile = new File(newFile);  //目标文件对象
        try {
            if (!(destFile.exists())) {      //判断目标文件是否存在
                destFile.createNewFile();  //如果不存在则创建新文件
          }
          //使用源文件对象创建文件输入流对象
          FileInputStream fis = new FileInputStream(srcFile);
          //使用目标文件对象创建文件输出流对象
          FileOutputStream fos = new FileOutputStream(destFile);
               
          byte[] buf = new byte[1024];  //创建字节数组,作为临时缓冲,每次读取的数据量
          System.out.println("开始复制文件...");
          while (fis.read(buf) != -1) {  //循环从文件输入流中读取数据,-1表示读完了文件
                fos.write(buf);    //写入到文件输出流中
          }
          System.out.println("文件复制成功!");
     
        fis.close();    //关闭流
        fos.close();
        catch (Exception e) {
        e.printStackTrace();
        
    }

    里面涉及到的几个对象简单介绍一下吧。

    1.File类:既可以表示文件,也可以表示目录。常用的方法如下:

    wKiom1nAcKLwygWcAAD6raozrAk957.png

    2.FileInputStream类:继承于InputStream类,用于读文件,以字节方式将文件中的数据输入到内存中。

    3.FileOutputStream类:继承于OutputStream类,用于写文件,以字节方式将内存中的数据输出到文件中。

    注意:因为是以字节的方式读或写,所以在处理的过程中,文件是无法使用的,就和我们在网上下载文件是一样滴道理


    二、字符流

        字符流就很好理解了,以字符为最小单位来处理数据,一般用于处理文本类的文件比较方便,很多小说阅读器读取TXT的小说就使用这种方式来处理。

        接下来,分别写两个方法以字符流的方式来处理文本文件。

    2.1逐行读取文件内容,并显示到控制台

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /**
     * 读取文本文件内容
     * @param path 文件路径
     */
    public static void txtRead(String path){
        File file = new File(path);
        try {
            //通过文件对象创建文件读取流对象
            FileReader fr = new FileReader(file);
            //将文件读取流包装成缓冲读取流
            BufferedReader br = new BufferedReader(fr);
             
            String str;
              //逐行读取数据
            while ((str = br.readLine()) != null){
                System.out.println(str);
            }
            br.close();   //关闭流
            fr.close();   //关闭流
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    2.2将输入的文本保存到文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /**
     * 写入文本文件
     * @param path 文件路径
     */
    public static void txtWriter(String path){
        File file = new File("test.txt");
        try {
            //通过文件对象创建文件输出字符流对象
            FileWriter fw = new FileWriter(file);
            //将文件输出字符流包装成缓冲流
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write("大家好!");
            bw.write("我正打算放弃Java,");
            bw.newLine();    //换个新行
            bw.write("请多多指教。");
            bw.close();      //关闭流
            fw.close();      //关闭流
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    OK,文件的基本操作就介绍这到儿吧,其实实际开发用得更多的一种方式是序列化和反序列化,这个操作的代码比较简单,就不在这儿介绍了,有兴趣的小伙伴自行百度一下吧。

    “软件思维”博客地址:51CTO博客园,感兴趣的小伙伴可以去看相关的其它博文。  

  • 相关阅读:
    利用搜狐查询接口举例说明
    超有用! 地址栏网址静默更新, 进入新网页也可以后退回去,.
    mouseenter 与 mouseover 区别于选择
    使用querySelector添加移除style和class
    网页修改<title ></title >标签内容
    (超实用)前端地址栏保存&获取参数,地址栏传输中文不在乱码
    html页面在苹果手机内,safari浏览器,微信中滑动不流畅问题解决方案
    python归一化方法
    opencv-python之投影
    matplotlib的用法
  • 原文地址:https://www.cnblogs.com/yixueyuan/p/7550704.html
Copyright © 2011-2022 走看看