当前课程知识点:Java程序设计 >  第五章 输入输出 >  5.3.2-读文本文件 >  读文本文件

返回《Java程序设计》慕课在线视频课程列表

读文本文件在线视频

读文本文件

下一节:写二进制文件

返回《Java程序设计》慕课在线视频列表

读文本文件课程教案、知识点、字幕

大家好

欢迎回来继续学习

Java语言程序设计

这一节我们来学习读文本文件

我要给大家介绍

怎么样从文本文件中

将信息读到程序空间中来

最后会给大家

看一个文件复制的例子

要从文本文件中读取信息

最常用的就是FlieReader和BufferedReader这两个类了

FlieReader类负责

从文本文件中读取字符

而BufferedReader类是一个缓冲器

而且它具有按行读的

这个readLine方法

这个是非常有用的

我们来看接下来的这个例子

就是从文本文件中读取数据

并且在显示器上显示出来

现在我们构造一个

文件输入流对象

想用这个对象来读取

我们先前写的这个

Hello.text这个文件

那我们就构造一个

FlieReader文件输入流对象

参数就是Hello.text的这个文件名

同样我们也在外面套一个缓冲流

以这个FlieReader对象为参数

再构造一个BufferedReader

那么这个BufferedReader它与BufferedeWriter对应

都可以识别文本的行

它也一个很有用的功能readLine

读取一行内容

读完了以后看看

读这一行是不是空

如果不是空就把它

送到显示器上显示一行

然后继续再读入一行

然后如此循环

直到读到一个空为止

就说明文件已经读完了

那么同样这些文件访问操作

都是有可能产生异常的

所以将它放在try块里面

后面用catch来捕获

如果发生了异常

捕获了就给出异常信息

也就是说告诉用户

哪个文件出问题了

那么我们要是运行这个程序

大家会看到屏幕上

会逐行显示这个Hello.txt

这个文件的内容

大家可以课后运行一下试试

或者你现在就暂停这个录像

然后你自己动手试试看

那么关于我们

见到的FlieReader对象

那么创建以后将打开文件

如果文件不存在

就会抛出一个IO异常

也就是说你要读的文件

它首先得存在

不存在您试图去

打开一个用于读的文件

那么就会抛出异常

BufferedReader类的

readLine方法是可以按行读的

读到文件尾就是返回空了

其实read类还有另外一个read方法

如果我们用read方法来读的话

怎么判文件结束呢

那么read方法呢

会返回一个表示某个字符的

这个int类型的整数

如果你读到文件尾了

它就返回负1

所以我们也可以像这样来修改

刚才这个例题中的这个程序

我们这个while循环

每次就用read来读

读一个字符写一个字符

直到read循环值是负1为止

最后就是完成了文件操作以后

要用close方法去关闭文件

下面一个例子是文件的复制

通过文件复制这样一个实例

我们可以看一看文件的

读和写操作是怎么样配合的

这个例题我们可以通过命令行

来指定源文件名和目标文件名

用命令行运行的话

用Java命令来运行

然后copy是这个程序的名字

这个sourceFile是你要复制的源

第一个参数destinationFile

是我们要复制的目标

是第二个参数

所以它在命令行中

要接收两个字符串作为参数

这里我们设计一个

这个CopyMaker类

还有一个是用来测试

这个CopyMaker类的复制功能的

我们定义一个FileCopy

主方法所在的类

这个CopyMaker类我们来看

打算定义几个方法

就定义一个对外的公有接口

一个Copy方法

这是外部可调用的

但是我们可以想象到

你既然要做复制

那么你要打开文件吧关闭文件吧

还有实质性的内容复制吧

所以我们进行功能分解

又写了三个起辅助作用的方法

都是private私有的方法

这些方法只是辅助Copy方法

完成复制功能的

在内外是看不见它的

所以它是辅助的

一个是openFiles打开文件用的

一个copyFiles

真正实施拷贝复制用的

一个是最后关闭文件用的

那这三个方法

它们的返回值都是布尔类型

如果成功的话就返回真

不成功就返回假

我们来看这是CopyMaker方法

它的数据成员的定义

有两个String引用

接下来要分别指向源文件名

和目标文件名

还有一个BufferedReader对象引用

一个BufferedeWriter对象引用

是将来要指向我们的

读写操作的流对象的

这个String类型的这个引用line

将来是要指向

我们读取的那个数据的

中间缓冲的那个数据的

现在看这个打开文件的方法

这里我们把构造

输入流对象的操作

放在try块里面

内层是一个FlieReader

输入流对象外面套了一个BufferedeWriter缓冲

也可以按行读

这个构造输出流对象的语句

也在try块里面

它们后面都有catch块来捕获

这个IO异常

同样输出流也是在FlieReader外面

套了一个BufferedeWriter

如果这些打开文件的语句

都正确了

也就是说没有发生异常

没有进入cactc块

最后会return true

如果进到任何一个catch块里面了

给出错误信息以后

就会return一个false

表示打开两个文件

这个操作总的来说是失败的

再看文件复制

copyfiles的方法中

用这个while循环

来读一行写一行

首先进入while之前

读一行做好准备

看看只要这个

读到的东西不是空的

那么就写一行再读下一行

写一行要再写一个newLine

因为你按原样复制

原来人家换行的地方

你写的也要换行

所以写一行以后

再写一个换行符

跨平台的换行符

然后再读下一行

进入下一次循环

这样的操作也是放在try块中

如果不发生错误的话

最后会return true

表示文件成功的复制完了

如果复制到中间的地方

发生什么错误的话

就会抛出异常的

这个时候会进入catch块

就return false

就表示这个复制不成功

再看这个关闭文件

也是两个try块

分别关闭两个文件

一个是复制的源

一个是复制的目标文件

如果成功的关闭的话

就会进入最后一句

return这个retValue

大家看这个方法中

我用了一个不同的策略

看前面就是说在catch里面

直接return false

或者到最后直接return true

那么这就是一个方法中

有多个出口了

那么我们以前

学的结构化程序设计

都讲这个程序模块

应该单入口单出口

好像不应该

在多个地方都有return

其实在多个不同的分支里面

直接return也是效率挺高的

也是常见的做法

那么如果我们严格的

按照结构化程序设计的思想

那么就应该设一个标记

一个boolean类型的标记

然后在不同的分支中

把它设为不同的值

比如说进入catch块

说明发生错误了

把它赋值为false

如果没有进入catch块

它就是原来的初始值就是true

那么最后我再统一的

一个地方去return这个布尔值

如果严格按照

结构化程序设计思想

那么这方法应该是写成这样的

那么前面这样的写法

包括这样的写法

多个地方return也是常见的做法

也挺好的

大家自己写程序的时候

可以根据自己的习惯

用哪种方法都行

我只是把它都演示在这儿了

现在我们来看一下这个类里面

唯一的一个对外服务接口方法

就是这个copy

它是一个公有方法

外头调用的时候

就只能调用这个copy了

这个copy将接受到的

两个参数字符串

用来赋值给源文件名

和目标文件名设置好文件名

然后它就依次

调用openFiles打开文件

copyFiles复制文件内容

最后调用closeFiles关闭文件

这三个方法它们的返回值

都是布尔类型的

所以我们用与操作

把这三个方法的返回值连接起来

如果结果是真说明

这三个操作都正确完成了

那么整个复制就完成了

那这个时候copy

它也就return了一个真

如果这三个方法中有哪个方法

是有出问题了

它返回的是假

就说明没有能够正确的完成复制

那么整个copy方法

它的返回值也就是假

现在我们再来看这个测试类里面

测试类里面只有一个main方法

然后我们来看首先要来判断一下

这个命令行参数

里面的参数个数是不是2个

参数个数要不是2个

就说明这个命令行参数没有写对

那就给用户一个信息

你请你正确的输入文件名

然后就结束了

当然大家也可以去改改这个程序

让它能够有一个循环

输入文件名不够的话

等待它再输入

而不是直接就终止

好吧

这里头现在我们

用的是比较简单的

当参数个数正确的时候

就在这new一个copy maker对象

直接在这儿new一个copy maker对象

然后调用它的copy方法

也不用给它一个引用名了

直接用它这个结果调用copy方法

然后就把参数0参数1

作为实参去给到copy

那么在copy里面

我们看到就会

用它来设置源文件名

目标文件名并且执行打开文件

复制文件和关闭文件操作

这就是一个简单的文件

复制的例子

我们要知道在整个

这个FileCopy里Java它编译以后

会生成几个文件会生成两个文件

一个是FileCopy.class

和CopyMaker.class

因为我们将这两个类

都放在一个Java文件中了

虽然源文件是一个

编译以后它产生的结果

是每个类一个文件

我们再倒回去看一下

看这个CopyMaker它前面没有写

这个修饰符

那就说明它不是public它是什么

是default是默认的类型

它的访问控制权限是default

为什么呢因为每个Java文件中

都只能有一个公有类

那么这个我们

要执行的这个main方法

它所在的类当然应该是公有类

不然的话就没法执行了

如果希望这个文件复制功能

能够被包以外的

其他的程序调用的话

就需要把它也定义成public

那么这样的话这两个类

我们就不能放在一个源文件中了

就要分开源文件中放

那么我们执行的方式

就是用Java命令来执行

然后FileCopy是这个程序的名字

后面的两个字符串

就是你要复制的源文件和目标文件的文件名

可以是当前目录下的

简单的一个文件名

也可以是有盘符的

这样一个全路径名

这一节我们学习了

如何从文本文件中读取数据

这一节内容就是这些

Java程序设计课程列表:

第一章 Java语言基础知识

-1.0-导学

--1.0-导学

--JDK的安装与配置01

--JDK的安装与配置02

--JDK的安装与配置03

--编辑并执行第一个java程序01

--编辑并执行第一个java程序02

--编辑并执行第一个java程序03

--eclipse的安装和配置01

--eclipse的安装和配置02

--eclipse的安装和配置03

--使用eclipse进行Java的开发01

--使用eclipse进行Java的开发02

--使用eclipse进行Java的开发03

-1.1-Java与面向对象程序设计简介

--1.1.1 Java与面向对象程序设计简介

--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介

-1.2-基本数据类型与表达式

--1.2.1-基本数据类型与表达式

-第一章 Java语言基础知识--1.2-基本数据类型与表达式

-1.3-数组

--1.3.1-数组

-第一章 Java语言基础知识--1.3-数组

-1.4-算法的流程控制

--1.4.1-算法的流程控制

--第一章 Java语言基础知识--1.4-算法的流程控制

-1.5-第一章小结

--1.5.1-第一章小结

-第一章编程练习题

-课件

--外部链接

第一章续-习题讲解视频

-Java环境配置、Eclipse使用、Helloworld程序详解

--JAVA的安装和配置

--编写并执行第一个Java程序及Java的跨平台性

--eclipse的安装和配置

--使用eclipse建立Java项目、编写和运行Java程序

--Java注释和Eclipse中的注释操作

--详解HelloWorld程序

-Java数据类型

--Java数据类型介绍

--Java整数类型

--Java浮点类型

--Java字符类型和布尔类型

--数据类型实战

--数据类型转换

--Java强制类型转换精度损失示例与表达式中的数据类型转换

-Java数组

--Java数组介绍、声明与使用

--一维数组的初始化与length属性

--数组索引的原理与使用

--二维数组的介绍与使用

-Java变量

--Java的变量

-命令行参数

--命令行参数的介绍

第二章 类与对象

-2.0-导学

--2.0-导学

-2.1-面向对象方法的特性

--2.1-面向对象方法的特性

--第二章 类与对象--2.1-面向对象方法的特性

-2.2-1-类声明与对象创建

--2.2-1-类声明与对象创建

--第二章 类与对象--2.2-1-类声明与对象创建

-2.2-2-数据成员

--2.2-2-数据成员

--第二章 类与对象--2.2-2-数据成员

-2.2-3-方法成员

--2.2-3-方法成员

--第二章 类与对象--2.2-3-方法成员

-2.2-4-包

--2.2-4-包

--第二章 类与对象--2.2-4-包

-2.2-5-类的访问权限控制

--2.2-5-类的访问权限控制

--第二章 类与对象--2.2-5-类的访问权限控制

-2.3-1-对象初始化

--2.3-1-对象初始化

--第二章 类与对象--2.3-1-对象初始化

-2.3-2-内存回收

--2.3-2-内存回收

--第二章 类与对象--2.3-2-内存回收

-2.4-枚举类

--2.4-枚举类

--第二章 类与对象--2.4-枚举类

-2.5-应用举例

--2.5-应用举例

-2.6-第2章小结

--2.6-第2章小结

-第二章编程练习题

-课件

--第二章课件

第三章 类的重用

-3.0-导学

--3.0-导学

-3.1.1-3.1.2-类继承的概念和语法

--3.1.1-3.1.2-类继承的概念和语法

--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法

-3.1.3-隐藏和覆盖

--3.1.3-隐藏和覆盖

--第三章 类的重用--3.1.3-隐藏和覆盖

-3.2-Object 类

--3.2-Object 类

--第三章 类的重用--3.2-Object 类

-3.3-终结类与终结方法

--3.3-终结类与终结方法

--第三章 类的重用--3.3-终结类与终结方法

-3.4-抽象类

--3.4-抽象类

--第三章 类的重用--3.4-抽象类

-3.5-泛型

--3.5-泛型

--第三章 类的重用--3.5-泛型

-3.6-类的组合

--3.6-类的组合

-3.7-小结

--3.7-小结

-第三章编程练习题

-课件

--课件

第四章 接口与多态

-4.0-导学

--导学

-4.1-接口

--接口

--第四章 接口与多态--4.1-接口

-4.2.1-4.2.2-类型转换

--类型转换

--第四章 接口与多态--4.2.1-4.2.2-类型转换

-4.2.3-方法的查找

--方法的查找

--第四章 接口与多态--4.2.3-方法的查找

-4.3-多态的概念

--多态的概念

--第四章 接口与多态--4.3-多态的概念

-4.4-多态的应用举例

--多态的应用举例

--第四章 接口与多态--4.4-多态的应用举例

-4.5-构造方法与多态性

--构造方法和多态性

--第四章 接口与多态--4.5-构造方法与多态性

-4.6-本章小结

--本章小结

-第四章编程作业

-课件

--课件

第五章 输入输出

-5.0-导学

--5.0-导学

-5.1.1-5.1.2-异常处理的概念

--5.1.1-5.1.2-异常处理的概念

--第五章 输入输出--5.1.1-5.1.2-异常处理的概念

-5.1.3-5.1.5-异常的处理

--5.1.3-5.1.5-异常的处理

--第五章 输入输出--5.1.3-5.1.5-异常的处理

-5.2-输入输出流的概念

--输入输出流的概念

--第五章 输入输出--5.2-输入输出流的概念

-5.3.1-写文本文件

--写文本文件

--第五章 输入输出--5.3.1-写文本文件

-5.3.2-读文本文件

--读文本文件

--第五章 输入输出--5.3.2-读文本文件

-5.3.3-写二进制文件

--写二进制文件

--第五章 输入输出--5.3.3-写二进制文件

-5.3.4-读二进制文件

--读二进制文件

-5.3.5-File类

--File类

-5.3.6-处理压缩文件

--处理压缩文件

-5.3.7-对象序列化

--对象序列化

-5.3.8-随机文件读写

--随机文件读写

-5.4-本章小结

--本章小结

-课件

--课件

第六章 对象群体的组织

-6.0-导学

--导学

-6.1-Java集合框架介绍

--Java集合框架介绍

--第六章 对象群体的组织--6.1-Java集合框架介绍

-6.2-主要接口及常用的实现类

--6.2-主要接口及常用的实现类

--第六章 对象群体的组织--6.2-主要接口及常用的实现类

-6.3-常用算法

--常用算法

-6.4-数组实用方法

--6.4-数组实用方法

-6.5-基于动态数组的类型(Vector, ArrayList)

--基于动态数组的类型(Vector, ArrayList)

-6.6-遍历Collection

--遍历Collection

-6.7-Map接口及其实现

--Map接口及其实现

-6.8-第6章小结

--第6章小结

-课件

--课件

第七章 图形用户界面

-7.0-导学

--导学

-7.1-绘图

--绘图

-7.2-Swing基础

--Swing基础

-7.3-Swing的层次

--Swing的层次

-7.4-布局管理

--布局管理

-7.5-内部类

--内部类

-7.6-事件处理的基本概念

--事件处理的基本概念

-7.7-事件派发机制

--事件派发机制

-7.8-顶层容器

--7.8-顶层容器

-7.9-中间层容器(一)

--7.9-中间层容器(一)

-7.10-中间层容器(二)

--7.10-中间层容器(二)

-7.11-原子组件(一)

--7.11-原子组件(一)

-7.12-原子组件(二)

--7.12-原子组件(二)

-7.13-原子组件(三)

--7.13-原子组件(三)

-7.14-其它Swing特性

--7.14-其它Swing特性

-7.15-第7章小结

--7.15-第7章小结

-课件

--课件

读文本文件笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。