Java I/O流 (一)---文件流的基本操作
2014-04-18 23:00
232 查看
java I/O流是J***A重要内容之一,它对我们进行常见的文件操作至关重要。就Java流写写自己的学习心得。
首先java流是由java.io包中定义的类实现的,需要对流操作时候,首先要加上:import java.io.*。
java流中4个基本的抽象类如下图,其余的类都是从这几个类中派上出来的以及这几个类的类层次如下:
以上大体说明了J***A中流的层次结构。接下来说说java中经常采用的两类流:实体流和装饰流。实体流是指直接连接数据源的流类,它可以独立使用;而装饰流不直接连接数据源,而是以实体流对象为基础建立的流类。java i/0中我们经常针对的是文件操作,接下来就以文件为例主要说说这两类
一、java实体流FileInputStream,FileOutputStream,FileReader,FileWriter
1.文件字节流FileInputStream,FileOutputStream
(1)文件输入流FileInputStream类:我们采用以下方式打开一个已经存在的文件:
FileInputStream fileStream=new FileInputStream(new File(String filename));当filename不含带路径时候,就打开当前目录下面的文件;如果filename含带路径,就在指定的路径下面打开文件。
打开文件以后,使用read()方法一个字节一个字节的读取文件内容;当文件读完以后,采用close()方法关闭文件流即可。以下是一个从文本文件中读取数据并且显示出来的例子:
import java.io.*;
classFileInputStreamDemo1 {
public static voidmain(String[] args)
{
try {
File file = newFile("test.txt"); //创建文件对象
//使用文件对象创建文件输入流对象,相当于打开文件
FileInputStream fis = new FileInputStream(file);
for (int i =
0; i < file.length(); i++)
{
char ch =
(char)(fis.read()); //循环读取
System.out.print(ch);
}
System.out.println();
fis.close(); //关闭流
} catch (FileNotFoundException fnfe)
{
System.out.println("文件打开失败。");
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}}
在上述例子中,可以通过file.length()来判断是否已经到达文件末尾。
(2)文件输出流FileOutputSream:我们采用以下方式将数据写入到文件中去
FileOutputStream filestream=new FileOutputStream(new File(String filename));这些含义均和上面FileInputStream类相对应。需要说明的是FileOutputStream类中还有另外一个构造方法:
FileOutputStream(File file, booleanappend)
当参数append为true的时候表明追加文件内容,参数为false的时候表示不追加文件内容。
接下来用public
void write(byte b[],int off,int len); 写入内容。为了防止无法写入的问题,我们一般在这个方法后面采用flush()方法进行强行写入,写完以后采用close()方法关闭对象。具体实例如下:
import java.io.*;
class FileOutputStreamExample{
public static void main(String[] args)
{
try {
String str="好好学习Java";
byte[]
words = str.getBytes();//将字符串转化成字节数组
OutputStream fos =
new FileOutputStream("Output.txt ");
fos.write(words,
0, words.length);
System.out.println("Text文件已更新!");
fos.close();
} catch
(IOException obj) {
System.out.println("创建文件时出错!");
}
} }
2.文件字符流FileReader,FileWriter(操作流程和字节流相同)
(1)输入流FileReader类:没有什么特别的方法就不说了
(2)输出流FileWriter类:特别提到,这里用有一个方法void
write(String str) throws IOException,这个方法能够写入字符串。在这里面顺便比较一下Writer类和OutputStream类中flush()方法的区别:在OutputStream类的子类中并没有对父类的这一个方法进行实现;但是Writer类中的flush()方法是一个抽象方法,它的子类都对这个方法进行了实现。无论是使用字节流还是字符流进行输出的时候,我们一般都加上这个方法,这样可以方法数据无法写入到输出流中去。
二、java装饰流
1.缓冲流BufferedReader,BufferedWriter类
(1)BufferedReader类:装饰流的创建是先创建一个实体流,然后在创建一个装饰流。该类创建如下:
FileReader filereader=new FileReader(new File(String filename));
BufferedReader bfReader=new BufferedReader(filereader);
在这个类中最常用方法是String readLine()方法,它从缓冲输入流中读取一行字符,并且以字符串的形式放回。下面看看这个流的使用实例:
publicclassRraderDemo
{
public staticvoidmain(String[] args) throws IOException
{
File file= newFile("test.txt");
//通过文件对象创建文件输入流对象
FileReaderfr= newFileReader(file);
//将文件读取流包装成缓冲输入流
BufferedReaderbr= newBufferedReader(fr);
String str;
while((str= br.readLine())
!= null) //逐行读取数据
{
System.out.println(str);
}
br.close(); //关闭流
fr.close(); //关闭流
}
}
(2)BufferedWriter类:它最常用的方法是void write(String str)和void newLine()。后面这个方法是将回车换行符写入到流中,必须捕获异常IOException
2.数据流DataInputStream,DataOutputStream
这两个类提供了java读写基本数据类型int,byte,boolean,long,float,double,short,char的功能。它们对文件操作的时候要分别依附于FileInputStream和FileOutputStream这两个实体流。
通过上述介绍的内容,我们就可以实现对文件的基本操作,接着会在后续介绍J***A I/0流。
首先java流是由java.io包中定义的类实现的,需要对流操作时候,首先要加上:import java.io.*。
java流中4个基本的抽象类如下图,其余的类都是从这几个类中派上出来的以及这几个类的类层次如下:
以上大体说明了J***A中流的层次结构。接下来说说java中经常采用的两类流:实体流和装饰流。实体流是指直接连接数据源的流类,它可以独立使用;而装饰流不直接连接数据源,而是以实体流对象为基础建立的流类。java i/0中我们经常针对的是文件操作,接下来就以文件为例主要说说这两类
一、java实体流FileInputStream,FileOutputStream,FileReader,FileWriter
1.文件字节流FileInputStream,FileOutputStream
(1)文件输入流FileInputStream类:我们采用以下方式打开一个已经存在的文件:
FileInputStream fileStream=new FileInputStream(new File(String filename));当filename不含带路径时候,就打开当前目录下面的文件;如果filename含带路径,就在指定的路径下面打开文件。
打开文件以后,使用read()方法一个字节一个字节的读取文件内容;当文件读完以后,采用close()方法关闭文件流即可。以下是一个从文本文件中读取数据并且显示出来的例子:
import java.io.*;
classFileInputStreamDemo1 {
public static voidmain(String[] args)
{
try {
File file = newFile("test.txt"); //创建文件对象
//使用文件对象创建文件输入流对象,相当于打开文件
FileInputStream fis = new FileInputStream(file);
for (int i =
0; i < file.length(); i++)
{
char ch =
(char)(fis.read()); //循环读取
System.out.print(ch);
}
System.out.println();
fis.close(); //关闭流
} catch (FileNotFoundException fnfe)
{
System.out.println("文件打开失败。");
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}}
在上述例子中,可以通过file.length()来判断是否已经到达文件末尾。
(2)文件输出流FileOutputSream:我们采用以下方式将数据写入到文件中去
FileOutputStream filestream=new FileOutputStream(new File(String filename));这些含义均和上面FileInputStream类相对应。需要说明的是FileOutputStream类中还有另外一个构造方法:
FileOutputStream(File file, booleanappend)
当参数append为true的时候表明追加文件内容,参数为false的时候表示不追加文件内容。
接下来用public
void write(byte b[],int off,int len); 写入内容。为了防止无法写入的问题,我们一般在这个方法后面采用flush()方法进行强行写入,写完以后采用close()方法关闭对象。具体实例如下:
import java.io.*;
class FileOutputStreamExample{
public static void main(String[] args)
{
try {
String str="好好学习Java";
byte[]
words = str.getBytes();//将字符串转化成字节数组
OutputStream fos =
new FileOutputStream("Output.txt ");
fos.write(words,
0, words.length);
System.out.println("Text文件已更新!");
fos.close();
} catch
(IOException obj) {
System.out.println("创建文件时出错!");
}
} }
2.文件字符流FileReader,FileWriter(操作流程和字节流相同)
(1)输入流FileReader类:没有什么特别的方法就不说了
(2)输出流FileWriter类:特别提到,这里用有一个方法void
write(String str) throws IOException,这个方法能够写入字符串。在这里面顺便比较一下Writer类和OutputStream类中flush()方法的区别:在OutputStream类的子类中并没有对父类的这一个方法进行实现;但是Writer类中的flush()方法是一个抽象方法,它的子类都对这个方法进行了实现。无论是使用字节流还是字符流进行输出的时候,我们一般都加上这个方法,这样可以方法数据无法写入到输出流中去。
二、java装饰流
1.缓冲流BufferedReader,BufferedWriter类
(1)BufferedReader类:装饰流的创建是先创建一个实体流,然后在创建一个装饰流。该类创建如下:
FileReader filereader=new FileReader(new File(String filename));
BufferedReader bfReader=new BufferedReader(filereader);
在这个类中最常用方法是String readLine()方法,它从缓冲输入流中读取一行字符,并且以字符串的形式放回。下面看看这个流的使用实例:
publicclassRraderDemo
{
public staticvoidmain(String[] args) throws IOException
{
File file= newFile("test.txt");
//通过文件对象创建文件输入流对象
FileReaderfr= newFileReader(file);
//将文件读取流包装成缓冲输入流
BufferedReaderbr= newBufferedReader(fr);
String str;
while((str= br.readLine())
!= null) //逐行读取数据
{
System.out.println(str);
}
br.close(); //关闭流
fr.close(); //关闭流
}
}
(2)BufferedWriter类:它最常用的方法是void write(String str)和void newLine()。后面这个方法是将回车换行符写入到流中,必须捕获异常IOException
2.数据流DataInputStream,DataOutputStream
这两个类提供了java读写基本数据类型int,byte,boolean,long,float,double,short,char的功能。它们对文件操作的时候要分别依附于FileInputStream和FileOutputStream这两个实体流。
通过上述介绍的内容,我们就可以实现对文件的基本操作,接着会在后续介绍J***A I/0流。
相关文章推荐
- java对redis的基本操作
- JAVA IDE基本操作常识
- java线程学习1——线程基本概念和操作
- Java单链表基本操作(十)--判断单链表是否有环并输出环长度以及环的入口节点
- Java对redis的基本操作
- Java使用Apache poi 操作Excel-基本概念与使用
- Java 使用HashMap基本操作
- Java实现二叉树的基本操作
- Java使用POI导出excel(上)——基本操作
- java 操作redis 数据库一:基本操作
- Java使用基本JDK操作ZIP文件以及zip文件的加密、解密等功能
- java对redis的基本操作(转)
- java语言基础(82)——操作基本数据类型的流
- java对redis的基本操作
- HBase1.0.1基本操作(java代码)
- JAVA实现DAO基本层CRUD操作
- 用java实现对MongoDB的基本操作(增删改查)
- Mybatis原理解析(一)--java.sql数据库操作的基本实现方式
- Java基本数据的拆、装箱操作(unboxing&autoboxing)
- Java I/O流操作(四)---对象的序列化