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

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

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

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

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

一、字节流

字节都知道吧?

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

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

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

    第一步:打开冰箱门

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

    第三步:关闭冰箱

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

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

/*** 字节流方式复制文件(任何文件都可以复制)* @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逐行读取文件内容,并显示到控制台

/*** 读取文本文件内容* @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将输入的文本保存到文件

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

转载于:https://blog.51cto.com/softi/1966563

《Java从入门到放弃》JavaSE入门篇:文件操作相关推荐

  1. jmeter-5-从入门到放弃【基础篇】

    一.Jmeter简介: 1.简介 Jmeter 是一款基于Java程序开发的可视化客户端 (类似postman客户端).具有开源.高可扩展性.高移植性.多线程框架等特点. 简单来说它就是:界面友好,能 ...

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

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

  3. Binder从入门到放弃(框架篇)

    前言 Binder从入门到放弃包括了上下篇,上篇是框架部分,即本文.下篇通过几个典型的binder通信过程来呈现其实现细节,稍后发布,敬请期待. 一.什么是Binder? Binder是安卓平台上的一 ...

  4. 肺炎在家自学C#--从入门到放弃然后又入门又放弃又入门

    入门到第一次中断 去年的工作太忙,工作知识涉及面又广,大量学习的是管理经验,以及半导体检测设备现场故障处 理.下了班每天学一个小时软件,几个月过后,学习了有一百个小时.就没有然后了. 正如一切自学那样 ...

  5. C/C++语言入门篇 -- 文件操作

    最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操作就不写了,但是文件操作又是一个很重要的东西,而且也刚好能够总结之前我们学习的所有知识.同时也为了将文件操作 ...

  6. “笨办法”学Python 3基础篇-文件操作

    "笨办法"学Python 3基础篇系列文章 "笨办法"学Python 3基础篇 第一部分-打印与输入 "笨办法"学Python 3基础篇 第 ...

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

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

  8. Java新手教程从入门到放弃从入门到精通(3)

    运算 关系运算 布尔类型   接着上一篇继续讲布尔类型,下面创建两个布尔类型的变量并输出看下结果: public static void main(String[] args) {boolean bo ...

  9. 【软件测试从入门到放弃】入门阶段:迈入软件测试大门

    引言 本文将讲解软件的概念.软件的生命周期.软件测试方法.软件测试常见模型.软件测试的覆盖率及软件测试规范,一步步带你进入软件测试大门. 一.软件基础 1.1 软件 1 软件的概念 软件是计算机系统中 ...

  10. python 入门第二课2 file的文件操作

    务必注意读/写方式和指针位置 1.文件操作总结 模式'r'或者'r+'或者'rb+'指针初始位置在文件开头 模式'w'或者'w+'或者'wb+'指针初始位置在文件末尾 模式'a'或者'a+'或者'ab ...

最新文章

  1. 汽车之家APP车型配置--参数分析
  2. java知识点7——面向过程和面向对象、面向对象的内存分析、构造方法
  3. 6. Qt 信号与信号槽 (7)-QMetaObject:: activate
  4. 主成分分析(PCA)深入剖析+Matlab模拟
  5. Android之基于AssetManager实现换肤方案
  6. IntelliJ IDEA 使用 LiveEdit 插件实现实时可视化前端开发
  7. mysql adminer 导入csv_mysql导入csv的4种报错的解决方法
  8. matlab 爬虫 例子,认识爬虫(示例代码)
  9. Greeting Card 模拟
  10. 小米路由器R1D改造记录-安装MIXBOX
  11. SSH连接GitHub并配置ssh key
  12. 西安周边旅游++军事纪实
  13. 2021年国考申论写作之如何快速改进作文书写
  14. 《有效的单元测试》第三章
  15. torch.nn到底是什么?(精简版)
  16. 彩蛋-管理员root@‘locahost‘ 密码丢失,处理方案。
  17. PHP折算,php计算税后工资的方法
  18. docker启动和关闭命令
  19. Linux—系统安全及应用
  20. LCHub 1月低代码平台排行榜出炉:宜搭遥遥领先微搭低代码

热门文章

  1. unslider制作轮播图
  2. windows安装go环境变量
  3. JavaScript使用hash表方式实现数组去重。
  4. java设计模式之UML①
  5. VS2013支持多字节
  6. getCurrentPages()
  7. LAMP架构(七)配置防盗链,访问控制
  8. [译] 单元测试,精益创业,以及两者之间的关系
  9. BZOJ 2720 [Violet 5]列队春游 ——期望DP
  10. ip地址个数的计算,二进制与 8 比特