一、字节输出流 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