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

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

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

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

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

一、字节流

字节都知道吧?

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

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

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

    第一步:打开冰箱门

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

    第三步:关闭冰箱

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

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

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类:既可以表示文件,也可以表示目录。常用的方法如下:

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博客园,感兴趣的小伙伴可以去看相关的其它博文。

《Java从入门到放弃》JavaSE入门篇:文件操作的更多相关文章

  1. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  2. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  3. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  4. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  5. 《Java核心技术卷二》笔记(二)文件操作和内存映射文件

    文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...

  6. 《Java从入门到放弃》入门篇:springMVC数据校验

    昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...

  7. 《Java从入门到放弃》入门篇:hibernate中的多表对应关系

    hibernate中的对应关系其实就是数据库中表的对应关系, 就跟某些电影中的某些场景是一样一样滴. 比如可以是一男一女,还可以是一男多女, 更可以是多男一女,最后最后最后还可以是多男多女!!! 有些 ...

  8. 《Java从入门到放弃》入门篇:hibernate查询——HQL

    不知不觉又到了hibernate的最后一篇了,只感觉时光飞逝~,岁月如梭~! 转眼之间,我们就···························,好吧,想装个X,结果装不下去了,还是直接开始吧· ...

  9. 《Java从入门到放弃》入门篇:springMVC数据传递

    springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...

  10. Java性能测试从入门到放弃-详解篇

    Jmeter组件分类说明 Jmeter的组件可以放在任意位置 线程池:用于创建线程.每个线程会"批次顺序"执行任务,因此后面的任务可根据前面的任务决定具体的操作.          ...

随机推荐

  1. vim 基本编辑操作

    一.光标跳转到指定行 1.在命令模式下,跳转到指定行  :n   (n为行号) 2.命令行加参数 vim +n fileName 3.命令行加参数 vim + fileName 光标移至文件底部 4. ...

  2. hdu3416 Marriage Match IV(最短路+网络流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3416 题意: 给出含n个点.m条有向边的图,每条边只能走一次,给出起点和终点,求起点到终点的最短路径有 ...

  3. 使用jmeter执行多条sql语句

    注意2个地方 1. [JDBC Connection Configuration] 在配置DataBase URL的时候,加上allowMultiQueries=true参数如: jdbc:MySQL ...

  4. mvc中html导出成word下载-简单粗暴方式

    由于工作需求,需要把html简历页导出成word下载.网上搜索了很多解决方案,基本都是用一些插件,然后写法也很麻烦,需要创建模板什么的. 固定替换值  代码一大堆.但是对于我的需求来说  并没有什么用 ...

  5. WPF依赖属性2

    前一个博客,介绍了依赖属性的基本定义,在定义的过程中register中的的两个参数,并没有传入参数,不知道其是用来干什么的,以下,我们将介绍这两个参数的真正用途FrameworkPropertyMet ...

  6. 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

  7. 如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)

    Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来.与 VxLAN 不同的是,Calico 不对数据 ...

  8. R0~R16寄存器作用(转)

    R0-R3     用作传入函数参数,传出函数返回值.在子程序调用之间,可以将 r0-r3 用于任何用途. 被调用函数在返回之前不必恢复 r0-r3.如果调用函数需要再次使用 r0-r3 的内容,则它 ...

  9. 第1阶段——u-boot分析之make指令(2)

    通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件 本文学习目标: 对Makefile文件进行基本了解,掌握make指令是怎么实现生成 ...

  10. 【ACM小白成长撸】--贪婪法解硬币找零问题

    question:假设有一种货币,它有面值为1分.2分.5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱.按照贪婪法的思想,需要不断地使用面值最大的硬币.如果找零的值小于最大的硬币值,则尝试第二 ...