您的位置 首页 java

零基础编程培训系列JAVA入门课程第十一讲Java文件处理

【导言,您正在阅读的是软件开发系列教程中的Java入门基础课程。这是一个系列教程,可以点击作者头像查看文章列表。动动手指关注一下,跟着熊猫学编程。】

Java 文件处理所用到的类都在Java. io 包下。

Java对文件的读写操作是用流的方式进行的。读取用输入流InputStream,写入用输出流OutputStream。InputStream和OutputStream是抽象类,定义了操作所需要的一系列抽象方法。具体实现有子类来完成,每种子类实现的方式又有不同。

Java的读写操作为了支持 Unicode 字符,又分为两种:字符流和字节流。

流的概论图

说到这里,肯定有人会问,那到底什么是流呢。

可以把Java中的流看成一个抽象的概念,可以把它想象成一个管道,当管道建立好了后,程序序只需要从管道里面读,取数据即可,具体实现方式由管道自己处理。

当Java程序需要读取数据时,就会从数据源开启一个输入流。 数据源可以是文件,内存或者网络等。 同样,当程序需要写出数据到数据源时也会开启一个输出流,输出流的数据源 也可以是文件、内存或者网络等。 也就是说不管是输入,输出,Java只管跟流打交道,只要是能开启流就能读取,输出数据。

字节流和字符流

字节流,就是用来处理字节数据的流,我们知道所有的数据其储存形式都是以字节来存放的。比如图像,视频,对象等这种数据都是二进制的数据,一般都是用字节流一个字节一个字节的处理。

字符流,但有些对象很特别,Unicode是用两个字节来存储数据的,因些处理含Unicode数据时,就要用到字符流。程序会自动进行转换处理存储细节。

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串。字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以;

以上说法很罗索,大家只要记住一点,你要处理含中文的字符,文本,就用字符流就ok。其它一切用字节流。

文件处理

  1. 一般文件处理步骤
  2. File对象指定文件位置
  3. 利用字节或者字符流来打开文件资源
  4. 读取或者输出数据
  5. 关闭输出输入流

一定要注意,操作文件属于资源操作,用完了一定要关闭,否则会一直占用文件。

我们来看一个例子,我们新建一个类,Cat,然后把这个类对象写入到文件中。然后再读取出来。由于写入的是类对象,所以我们用字节流。

我们建一个Cat类,实现Serializable,注意要对象必须要实现这个接口才能进行序列化相关操作,不然会报编译错误。

class Cat implements Serializable {

String color;

public Cat(String color) {

this.color=color;

}

public void color() {

System.out.println(“这是只花猫”);

}

然后在写一个方法 将cat对象写入

/**

* 对象写入到文件

*

* @param cat

* @throws IOException

*/

public void writeObject() throws IOException {

File file = new File(“cat.dat”);

ObjectOutputStream out = null;

try {

out = new ObjectOutputStream(new FileOutputStream(file));

out.writeObject(this);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

out.close();

}

}

我们来分析这段代码

File file = new File(“cat.dat”);

表示在当前目录建立了一个文件对象的引用,它代表一个文件,File有多个构造函数,这里传入一个字符串,代表文件名。

建立一个对象输出流ObjectOutputStream,此对象需要一个OutputStream流对象引用作为参数。

我们这里因为是操作文件,所以用到了FileOutputSteam流对象。

FileOutputSteam对象的实例化需要一个File对象做为参数。

out = new ObjectOutputStream(new FileOutputStream(file));

ObjectOutputStream对象实例化有可能会抛出IO异常,所以这里要添加try-catch语句。

然后调用ObjectOutputStream对象的writeObject方法。

在这里我们用this关键字,它表示在当前类的范围内特指这个类的对象本身。在这里就是指的cat对象。

执行完毕后,别忘了在finally语句里面关闭Output流。

运行此方法后,会在同目录出现一个cat.dat文件。

运行结果

然后我们再写一个方法,从这个文件中读取这个类对象,并调用这个对象的方法。

/**

* @param cat

* @throws IOException

*/

public Cat readObject() throws IOException {

File file = new File(“cat.dat”);

ObjectInputStream in = null;

Cat cat = null;

try {

in = new ObjectInputStream(new FileInputStream(file));

cat = (Cat) in.readObject();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

in.close();

}

return cat;

}

public static void main(String[] args) {

Cat cat = new Cat(“白色”);

try {

cat.writeObject();

//读取对象

Cat cat2=cat.readObject();

cat2.color();

} catch (IOException e) {

e.printStackTrace();

}

}

运行此函数 会看到打印一行语句

运行结果2

字符流

下面我们来看看字符流的相关例子

package com.ui.file;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

public class FileDemo {

public static void main(String[] args) {

File file = new File(“str.dat”);

PrintWriter pw = null;

try {

pw = new PrintWriter(new FileWriter(file));

pw.write(“今天是个好天气”);

pw.flush();

} catch (IOException e) {

e.printStackTrace();

} finally {

pw.close();

}

}

}

在这里我们用到了PrintWriter对象,此对象可以向文本文件按行写入中文字符。

PrintWriter对象需要一个FileWriter对象做为参数,而FileWriter又需要一个文件File对象做为参数。我们这里把字符写入到当前文件str.dat中。

写入时调用PrintWriter的println方法,写一行字符。

运行程序时,会发现在当前目录新建了一个str.dat文件,用记事本打开如下。

运行结果3

Java对文件的处理主要集中在File类里面,可以查询Java API文档,来了解File类的基本用法。

课后总结:

理解Java中流的概念

熟悉Java中有关File的相关操作

理解字节流和字符流的不同处理方式。

课后作业

用程序生成一个str.txt文件,然后向文件中写入一行中文:“我在努力学习Java编程”

【原创教程】欢迎关注,每天2小时,只要你跟着学,就能轻松掌握编程技术,我是熊猫,明天见。

下期课程预告:

Java工具包

文章来源:智云一二三科技

文章标题:零基础编程培训系列JAVA入门课程第十一讲Java文件处理

文章地址:https://www.zhihuclub.com/188376.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图