JAVA中针对文件的读写操作设置了一系列的流,FileInputStream,FileOutputStream,FileReader,FileWriter是四种最为常用的流
FileInputStream
该流用于从文件读取数据,它的对象可以用关键字 new 来创建。
有多种构造方法可用来创建对象。
可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream f = new FileInputStream("C:/java/hello");
也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:
File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);
创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。
序号 | 方法 | 描述 |
---|---|---|
1 | public void close() throws IOException{} | 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 |
2 | protected void finalize()throws IOException {} | 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。 |
3 | public int read(int r)throws IOException{} | 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。 |
4 | public int read(byte[] r) throws IOException{} | 这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。 |
5 | public int available() throws IOException{} | 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
实例代码
import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
/**
* io标准操作步骤
* 1、选择源
* 2、选择流
* 3、进行操作(操作字节数组)
* 4、释放资源
* @author ww
*
*/
public class IOTest03 {
public static void main(String[] args) {
//1、选择源
File file=new File("src/com/ww/iostudy02/abc.txt");
//2、选择流
InputStream is=null;
try {
is=new FileInputStream(file);
int len=-1; //返回的长度
byte[] flush=new byte[1024*10];//缓冲区
//3、操作
while((len=is.read(flush))!=-1)
{
//字节数组-->字符串(解码)
String str=new String(flush,0,len);
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
//4、释放资源
try {
if(is!=null) //如果文件为空(没有用到),不需要关闭 防止空指针
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileOutputStream
FileOutputStream流是指文件字节输出流,专用于输出原始字节流如图像数据等,其继承OutputStream类,拥有输出流的基本特性
创建FileOutputStream流以写入数据到File对象表示的文件。 如果第二个参数为true,则字节将写入文件的末尾而不是开头。 创建一个新的FileDescriptor对象来表示此文件连接。其抛异常的规则与第一个构造函数一致
public FileOutputStream(File file,boolean append) throws FileNotFoundException{}
序号 | 方法 | 描述 |
---|---|---|
1 | void close() | 关闭此文件输出流并释放与此流相关联的任何系统资源。 |
2 | protected void finalize() | 清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法。 |
3 | FileChannel getChannel() | 返回与此文件输出流相关联的唯一的FileChannel对象。 |
4 | FileDescriptor getFD() | 返回与此流相关联的文件描述符。 |
5 | void write(byte[] b) | 将 b.length个字节从指定的字节数组写入此文件输出流。 |
6 | void write(byte[] b, int off, int len) | 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。 |
7 | void write(int b) | 将指定的字节写入此文件输出流。 |
在文件末尾追加
实例代码
import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 文件字节输出流
* 1、选择源
* 2、选择流
* 3、进行操作(写入)
* 4、释放资源
* @author ww
*
*/
public class IOTest04 {
public static void main(String[] args) {
//1、选择源
File file=new File("src/com/ww/iostudy02/test.txt");
//2、选择流
OutputStream os=null;
try {
//os=new FileOutputStream(file);
//追加
os=new FileOutputStream(file,true);
//3、操作(写入)
String str="IO is so easy";
byte[] datas=str.getBytes();//字符串-->字节数组(编码)
os.write(datas);
os.flush();//刷新
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
//4、释放资源
try {
if(os!=null) //如果文件为空(没有用到),不需要关闭 防止空指针
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileReader
FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。可以通过以下几种构造方法创建需要的对象。
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(File file)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。
FileReader(FileDescriptor fd)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。
FileReader(String fileName)
创建FIleReader对象成功后,可以参照以下列表里的方法操作文件。
序号 | 方法 | 描述 |
---|---|---|
1 | public int read() throws IOException | 读取单个字符,返回一个int型变量代表读取到的字符 |
2 | public int read(char [] c, int offset, int len) | 读取字符到c数组,返回读取到字符的个数 |
遍历文本实例代码:
import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
/**
* 文件字符输入流
* 1、选择源
* 2、选择流
* 3、进行操作(操作字节数组)
* 4、释放资源
* @author ww
*
*/
public class IOTest05 {
public static void main(String[] args) {
//1、选择源
File file=new File("src/com/ww/iostudy02/abc.txt");
//2、选择流
Reader reader=null;
try {
reader=new FileReader(file);
int len=-1; //返回的长度
char[] flush=new char[1024];//缓冲区
//3、操作
while((len=reader.read(flush))!=-1)
{
//字符数组-->字符串
String str=new String(flush,0,len);
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
//4、释放资源
try {
if(reader!=null) //如果文件为空(没有用到),不需要关闭 防止空指针
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter
FileWriter 类从 OutputStreamWriter 类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。
在给出 File 对象的情况下构造一个 FileWriter 对象。
FileWriter(File file)
在给出 File 对象的情况下构造一个 FileWriter 对象。
FileWriter(File file, boolean append)
参数:
file:要写入数据的 File 对象。
append:如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则写入文件开始处。
构造与某个文件描述符相关联的 FileWriter 对象。
FileWriter(FileDescriptor fd)
在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。
FileWriter(String fileName, boolean append)
创建FileWriter对象成功后,可以参照以下列表里的方法操作文件。
序号 | 方法 | 描述 |
---|---|---|
1 | public void write(int c) throws IOException | 写入单个字符c。 |
2 | public void write(char [] c, int offset, int len) | 写入字符数组中开始为offset长度为len的某一部分。 |
3 | public void write(String s, int offset, int len) | 写入字符串中开始为offset长度为len的某一部分。 |
实例
import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
/**
* 文件字符输出流
* 1、选择源
* 2、选择流
* 3、进行操作(写入)
* 4、释放资源
* @author ww
*
*/
public class IOTest06 {
public static void main(String[] args) {
//1、选择源
File file=new File("src/com/ww/iostudy02/test.txt");
//2、选择流
Writer writer=null;
try {
writer=new FileWriter(file);
//追加
// writer=new FileWriter(file,true);
//3、操作(写入)
//写法一
// String str="IO is so easy\n许昌学院";
// char[] datas=str.toCharArray();//字符串-->字节数组(编码)
// writer.write(datas);
//写法二
// String str="IO is so easy\n许昌学院";
// writer.write(str);
//写法三
writer.append("IO is so easy\n").append("许昌学院");
writer.flush();//刷新
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
//4、释放资源
try {
if(writer!=null) //如果文件为空(没有用到),不需要关闭 防止空指针
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}