java进阶_Java进阶篇(五)——Java的I/O技术

程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们。Java的I/O技术可以将数据保存到文本文件、二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求。

本篇我们要介绍的内容就是Java的I/O技术,即输入/输出。

一、输入/输出流

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流。

而专门负责各种方式的输入、输出的类,都被放在java.io包中。所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。

1. 字节输入/输出流

下面是一个字节输入/输出流的实例。其中,第14行为从输入流中读取字节并存入buffer数组中,最长读取2500个字节,返回值b为实际读取的长度。

1 importjava.io.File;2 importjava.io.FileInputStream;3 importjava.io.FileOutputStream;4

5 public classIOExample {6 public static voidmain(String[] args) {7 try{8 intb;9 File file = new File("E:\\test.txt"); //创建一个文件

10

11 FileInputStream readfile = new FileInputStream(file); //创建输入流

12

13 byte buffer[] = new byte[2500]; //创建字节数组

14 b = readfile.read(buffer, 1, 2000); //1为buffer数组中的起始偏移量

15 String str = new String(buffer, 0, b, "Default");16 System.out.println(str);17 readfile.close(); //关闭流

18

19 FileOutputStream writefile = new FileOutputStream(file, true); //创建一个输出流,true为保留原有数据,新数据追加至结尾

20 writefile.write(buffer, 0, b);21 writefile.close();22 } catch(Exception e) {23 e.printStackTrace();24 }25 }26 }

上述代码中的FileInputStream类和FileOutputStream类属于文件输入输出流,该类分别继承自InputStream类和OutputStream类。

InputStream类常用方法需了解read()、close()、reset()等方法;OutputStream类常用方法需了解write()、flush()、close()等方法。具体可参照API。

2. 字符输入/输出流

下面是一个字符输入/输出流的实例。

1 importjava.io.FileReader;2 importjava.io.FileWriter;3

4 public classIOExample {5 public static voidmain(String[] args) {6 try{7 FileReader fileread = new FileReader("E:\\test.txt"); //字符输入流,读取文件信息

8

9 char[] cbuf = new char[500];10 int b = fileread.read(cbuf, 0, 500);11 System.out.println(String.valueOf(cbuf));12 fileread.close();13

14 FileWriter filewriter = new FileWriter("E:\\test.txt", true); //字符输出流,向输出流中写入信息,并且保留原有数据,追加数据值末尾处

15 filewriter.write(cbuf);16 filewriter.close();17 } catch(Exception e) {18 e.printStackTrace();19 }20 }21 }

上述代码中的FileReader类和FileWriter类也属于文件输入输出流。

3. 文件输入/输出流

上面的代码中出现了一个新的名词叫文件输入/输出流,也就是FileInputStream、FileOutputStream和FileReader、FileWriter。它们的作用是与指定的文件建立连接,将需要的数据永久保存到文件中。

FileInputStream类和FileOutputStream类都是用来操作磁盘文件的,如果用户的文件读取比较简单,则可使用该类。但由于汉字在文件中占用两个字节,读取不好可能出现乱码现象。

FileReader类和FileWriter类可避免乱码现象,分别对应了FileInputStream类和FileOutputStream类。

二、File类

File类是io包中唯一代表磁盘文件本身的对象,可以通过调用File类中的方法,实现创建、删除、重命名文件等。

1. 文件的创建与删除

可以使用File类创建一个文件对象,三种构造方法的语法格式如下:

newFile(String pathname)newFile(String parent, String child)new File(File f, String child)

pathname是路径名称,parent是父路径字符串,child是子路径字符串,f是父路径对象。如下例:

File file = new File("E:/test.txt");

File file= new File("E:/myword","word.txt");

如果E:/myword目录下没有名称为word的文件,File类对象可通过createNewFile()方法创建一个名称为word.txt的文件;如果存在,可通过delete()方法将其删除。

2. 获取文件信息

File类提供了许多方法用于获取文件本身的一些信息,下表是一些常用方法。

方法

说明

getName()

获取文件的名称

canRead()

判断文件是否可读

canWrite()

判断文件是否可以被写入

exist()

判断文件是否存在

length()

获取文件的长度

getAbsolutePath()

获取文件的绝对路径

getParent()

获取文件的父路径

isFile()

判断文件是否存在

isDirectory()

判断文件是否是一个目录

isHidden()

判断文件是否是隐藏文件

lastModifed()

获取文件最后修改时间

如我们创建一个文件,获取文件长度等信息如下:

1 importjava.io.File;2

3 public classFileTest {4

5 public static voidmain(String[] args) {6 File file = new File("E:/myword", "word.txt"); //创建文件对象

7 if(file.exists()) { //判断文件是否存在

8 String name = file.getName(); //获取文件名称

9 long length = file.length(); //获取文件长度

10 boolean hidden = file.isHidden(); //判断文件是否是隐藏文件

11

12 System.out.println("文件名称:" +name);13 System.out.println("文件长度是:" +length);14 System.out.println("是否是隐藏文件:" +hidden);15 } else{16 System.out.println("文件不存在");17 }18 }19

20 }

三、带缓存的输入/输出流

缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。

1. BufferedInputStream类与BufferedOutputStream类

构造函数如下:

BufferedInputStream(InputStream in)

BufferedInputStream(InputStream in,intsize)

BufferedOutputStream(OutputStream in)

BufferedOutputStream(OutputStream in,int size)

2. BufferedReader类与BufferedWriter类

常用方法如下:

方法

说明

read()

读取单个字符

readLine()

读取一个文本行,返回为字符串;若无数据则返回为null

write(String s, int off, int len)

写入字符串的某一部分

flush()

刷新该流的缓存

newLine()

写入一个行分隔符

这里要注意,在使用BufferedWriter类的write()方法时,数据并没有立刻被写入到输出流时,而是首先进入缓存区中,如果想立刻将缓冲区中的数据写入输出流中,一定要调用flush()方法。

四、数据输入/输出流

数据输入/输出流为DataInputStream类与DateOutputStream类,允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型。

构造方法如下:

DataInputStream(InputStream in)

DataOutputStream(OutputStream out)

DataOutputStream类提供了以下三种写入字符串的方法:

writeBytes(String s)

writeChars(String s)

writeUTF(String s)

五、ZIP压缩输入/输出流

利用ZipOutputStream类对象,可将文件压缩为.zip文件。

构造函数如下:

ZipOutputStream(OutputStream out);

ZipInputStream类可读取ZIP压缩格式的文件,包括对已压缩和未压缩条目的支持。

构造函数如下:

ZipInputStream(InputStream out);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值