一、字节输出流 OutputStream
OutputStream为抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性方法。
1、方法:
void close():关闭此输出流并释放与此流有关的所有系统资源。
void flush():刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b):将b.length个字节从指定的byte数组写入此输出流。
void write(byte[] b, int off, int len):将指定byte数组中从偏移量 off 开始的 len 个字节写入此输出流。
abstract void write(int b):将指定的字节写入此输入流。
2、FileOutputStream类
OutputStream 有很多子类,其中子类 FileOutputStream 可用来将数据写入到文件中。
FileOutputStream 类,即文件输出流,是用于将数据写入到 File 的输出流。
FileOutputStream 类的构造方法:
FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的文件输出流
2.1 FileOutputStream类写入数据到文件中
流对象的使用步骤:
1.创建流子类的对象,绑定数据目的
2.调用流对象的write写方法
3.close释放资源
1 import java.io.FileOutputStream;
2 import java.io.IOException;
3
4 public class FileOutputStreamDemo {
5 public static void main(String[] args) throws IOException {
6 FileOutputStream fos = new FileOutputStream("F:\\123.txt");
7 byte[] b = "hello".getBytes();
8 fos.write(b);
9 fos.close();
10 }
11 }
2.2 文件续写和换行
直接new FileOutputStream(file)这样创建对象,写入数据,会覆盖原有的文件。
如何想要实现文件续写,则需使用FileOutputStream(File file, boolean append)或者FileOutputStream(File file, boolean append)这两种构造方法。当append值为true时,就会在文件末尾继续添加。
构造方法:
FileOutputStream(File file, boolean append):创建一个向指定File对象表示的文件中写入数据的文件输出流
FileOutputStream(File file, boolean append):创建一个向具有指定名称的文件中写入数据的文件输出流
代码:
1 import java.io.FileOutputStream;
2 import java.io.IOException;
3
4 public class FileOutputStreamDemo {
5
6 public static void main(String[] args) throws IOException {
7 FileOutputStream fos = new FileOutputStream("F:\\123.txt", true);
8 byte[] b = "hello".getBytes();
9 fos.write(b);
10 fos.close();
11 }
12 }
执行上面的代码两次,会在123.txt文件中产生“hellohello”数据。
换行:直接在需要换行的地方加“\r\n”即可,例如,如果上面的代码需要实现换行功能,可在“hello”后面添加“\r\n”,即“hello\r\n”。
二、字节输入流InputStream
InputStream是字节输入流的所有类的超类,定义了字节输入流的基本共性功能方法。
| abstract int | read() 这个方法将读入一个字节,并返回读入的字节,或者在遇到输入源结尾时返回-1. |
|---|---|
| int | read(byte[] b) 读入一个字节数组,并返回实际读入的字节数,或者在碰到输入流的结尾时返回-1.这个read方法最多读入b.length个字节。 |
1.FileInputStream类
FileInputStream是InputStream的一个子类,可用来读取文件内容。
FileInputStream从文件系统中的某个文件中获得输入字节。
1.1 构造方法
| FileInputStream(File file) | 通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象 |
|---|---|
| FileInputStream(String name) | 通过指定的字符串参数来创建File类对象,而后再与File对象所代表的实际路径建立链接创建FileInputStream流对象 |
构造函数 FileInputStream(String name) 的源码:
1 public FileInputStream(String name) throws FileNotFoundException {
2 this(name != null ? new File(name) : null);
3 }
1.2 read()方法
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.IOException;
4
5 public class FileInputStreamDemo {
6 public static void main(String[] args) throws IOException {
7 File file = new File("F:\\123.txt");
8 FileInputStream fis = new FileInputStream(file);
9 int ch = 0;
10 while((ch = fis.read()) != -1){
11 System.out.println((char)ch);
12 }
13 fis.close();
14 }
15 }
1.3 read(byte[] b)方法
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.IOException;
4
5 public class FileInputStreamDemo {
6 public static void main(String[] args) throws IOException {
7 File file = new File("F:\\123.txt");
8 FileInputStream fis = new FileInputStream(file);
9 byte[] b = new byte[1024];
10 int ch = 0;
11 while((ch = fis.read(b)) != -1){
12 System.out.println(new String(b, 0, ch));
13 }
14 fis.close();
15 }
16
17 }
18
练习
1.复制文件
1 import java.io.FileInputStream;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4
5 public class Copy {
6
7 public static void main(String[] args){
8 FileInputStream fis = null;
9 FileOutputStream fos = null;
10 try {
11 fis = new FileInputStream("F:\\123.txt");
12 fos = new FileOutputStream("D:\\abc.txt");
13 byte[] buf = new byte[1024];
14 int len = 0;
15 while((len = fis.read(buf)) != -1){
16 fos.write(buf,0,len);
17 }
18 } catch (Exception e){
19 e.printStackTrace();
20 } finally {
21 if(fis != null){
22 try {
23 fis.close();
24 } catch (IOException e) {
25 e.printStackTrace();
26 }
27 }
28 if(fos != null){
29
30 try {
31 fos.close();
32 } catch (IOException e) {
33 e.printStackTrace();
34 }
35 }
36
37 }
38 }
39
40 }
来源:https://www.cnblogs.com/peng19920430/p/11456305.html