FileOutputStream: 属于写入字节流
FileInputStream: 属于读取字符流
FileOutputStream
的方法和
FileWriter
的方法基本上大同小异,不过前者是以字节流的形式写入,后者以字符流的形式写入.
FileInputStream
的方法和
FileReader
的方法基本上大同小异,不过前者是以字节流的形式读取,后者以字符流的形式写入.
FileInputStream 有个特殊的方法…能获取字节的长度…
available();
FileOutputStream例子:
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException{
FileOutputStream fos = new FileOutputStream("bytedemo.txt");
fos.write("abcde".getBytes());
fos.close();
}
}
String类的方法getBytes() 将字符串转换成字符编码
运行结果
bytedemo.txt
文本文件,存入abcde
FileInputStream例子(1):
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("bytedemo.txt");
int ch;
ch = fis.read();
System.out.println((char)ch);
fis.close();
}
}
读取
bytedemo.txt
文本文件一个字节流**
运行结果:
FileInputStream例子(2):
如果想要读取文本文件全部的内容
使用循环
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("bytedemo.txt");
int len = 0;
while ((len = fis.read()) != -1) {
System.out.print((char) len);
}
fis.close();
}
}
运行结果:
FileInputStream例子(3):
使用自己创建缓冲区的字节流来读取
使用缓冲区速度会相对变快
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
private static final int BYTE_SIZE = 1024; //定义字节流缓冲区大小
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("bytedemo.txt");
byte[] buf= new byte[BYTE_SIZE];
int len = 0;
while((len = fis.read(buf)) != -1) {
System.out.print(new String(buf,0,len));
}
fis.close();
}
}
运行结果:
FileInputStream例子(4)
演示avialable()方法
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("bytedemo.txt");
int len = 0;
len = fis.available();
System.out.println(len);
}
}
运行结果: 5
文件里查看属性
可能有人想用available()方法可以获取大小来定义byte[ ]数组的大小…
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("bytedemo.txt");
byte[] buf = new byte[fis.available()];
}
}
但是这种方法要慎用…因为如果这个流并不是文本文件而是视频文件…
文件大…创建数组的时间就要很久了…或者如果文件太大…那么数组还有溢出的风险…会抛出异常.
FileOutputStream 与 FileInputStream 例子:
复制一个Mp3文件
在D盘目录放有一个0.mp3的文件,现在将它复制到F盘中
import java.io.*;
public class Demo {
private static int BYTE_SIZE = 1024;
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\0.mp3");
FileOutputStream fos = new FileOutputStream("F:\\test.mp3");
int len = 0;
byte[] buf = new byte[BYTE_SIZE];
while((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fis.close();
fos.close();
}
}
运行结果: