IO流FileInputStream和FileOutputStream
1.概念
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
2.流的分类
流按流向分为两种:输入流,输出流。
流按操作类型分为两种:
字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流 : 字符流只能操作纯字符数据,比较方便。
3.IO流常用父类
-
字节流的抽象父类: 字节流可以读取任意文件图片音频等。
InputStream(字节输入流)
OutputStream(字节输出流) -
字符流的抽象父类:
Reader(字符输入流)
Writer(字符输出流)
4.IO程序书写
1.使用前,导入IO包中的类
2.使用时,进行IO异常处理(因为Io流是操作键盘和内存之间的联系,将硬盘上的存放在内存中,但是硬盘上可能不存在东西,所以需要先用异常处理)
3.使用后,释放资源(内存和硬盘之间建立了管道,数据进行流通使用之后需要关掉,释放资源) -
read()一次读取一个字节
-
fis.close()关闭流释放资源
-
常用的方法
案例:FileInputStream读取字节
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStream {
public static void main(String[] args) throws IOException {
//demo1 ( );
java.io.FileInputStream fis = new java.io.FileInputStream("src\\main\\java\\sss.txt" );//sss.txt中写的是abcd
//本类的类名和java自带的类名重复了,如果想引用java自带的,必须要写java的全限定名来限定,写java的全限定名来限定的意义是:与自己定义的类名重复了用包做区别
int b;
while ((b = fis.read ()) != -1){ //-1文件结束的标志
System.out.println ( b );
}
fis.close ();
}
private static void demo1() throws IOException { //ctrl+alt+m 提取方法出来
java.io.FileInputStream fis = new java.io.FileInputStream ( "src\\main\\java\\sss.txt" ); //创建流对象
fis.read ();
int x = fis.read (); //从硬盘上读取一个字节
System.out.println ( x );
int y = fis.read ();
System.out.println ( y );
int z = fis.read ();
System.out.println ( z );
int a = fis.read ();
System.out.println ( a );
fis.close ();
}
}
结果
97
98
99
100
案例:FileOutputStream输出字节到另一个文件上
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo1_FileOutputStream {
/**
* FileOutputStream在创建对象的时候是如果没有这个文件会帮我创建出来
* * 如果有这个文件就会先将文件清空
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//demo2 ( );
FileOutputStream fos = new FileOutputStream ( "src\\main\\java\\qqq.txt" , true ); //如果想接着后面续写就在第二个参数传true
fos.write ( 97 );
fos.write ( 98 );
fos.write ( 99 );
fos.close ( );
}
private static void demo2() throws IOException {
FileOutputStream fos = new FileOutputStream ( "src\\main\\java\\qqq.txt" ); //创建字节输出流对象,如果没有就自动创建一个
fos.write ( 97 ); //虽然写出的是一个int数,但是到文件上的是一个字节,会自动去除前三个8位
fos.write ( 98 );
fos.write ( 99 );
fos.write ( 100 );
fos.close ( );
}
}
结果
abc