package InputOutput;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/*
* 字节流:
* 如果用户想要操作的不是文本数据,而是图片数据,这时候就需要用到字节流
*/
public class FileStreamDemo {
public static void main(String[] args) throws IOException{
// writeFile();
// readFile_1();
// readFile_2();
readFile_3();
}
/*
* 使用字节流写入一个文件
*/
public static void writeFile()throws IOException{
//创建一个字节输出流
FileOutputStream fos = new FileOutputStream("c:/2.txt");
//将需要写入的字符串写入,并且调用字符串的getBytes()方法,将字符串转换为字符数组
fos.write("abcdegfhijklmn".getBytes());
//字节流不用刷新
fos.close();
}
public static void readFile_1() throws IOException{
//创建一个字节读取流
FileInputStream fis = new FileInputStream("c:/1.txt");
//读取数据(读取一个字节,效率慢)
int ch = 0;
while((ch = fis.read()) != -1){
System.out.print((char)ch);
}
}
/*
* 一次性读取多个
*/
public static void readFile_2() throws IOException{
//创建一个字节流
FileInputStream fis = new FileInputStream("c:/1.txt");
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf)) != -1){
System.out.println(new String(buf,0,len));
}
}
/*
* 第三各方读取字节流的方式,字节流特有的方式
* available(); 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。
* (注意:如果我们操作的文件过大,超出了内存或者JVM的大小,则JVM直接崩溃,所以如果要操作大文件,还是建议采用第二种方式)
*/
public static void readFile_3()throws IOException{
FileInputStream fis = new FileInputStream("c:/1.txt");
// int num = fis.available(); //获取文件里面的数据长度,注意:如果有换行\r\n,代表两个字节
byte[] buf = new byte[fis.available()]; //注意:fis.available()获取文件的长度,做为数组的长度
fis.read(buf); //读取文件到数组中去
System.out.println(new String(buf)); //将数组转换为字符串,打印出来
}
}