1.基本IO操作
有时候我们编写的程序除了自身会定义一些数据信息外,还需要引用外界的数据,或是将自身的数据发送到外界,这时我们需要使用输入与输出。
1)输入与输出
输入:是一个从外界进入到程序的方向,通常我们需要“读取”外界的数据时,使用输入。所以输入是用来读取数据的
输出:是一个从程序发送到外界的方向,通常我们需要“写出”数据到外界时,使用输出。所以输出是用来写出数据的
2)节点流与处理流
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从一个特定的地方(节点)读写数据,通常也称为低级流
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,通常也称为高级流或过滤流
处理流的构造方法总是要带一个其他的流对象做参数,一个流对象经过其他流的多次包装,称为流的链接。
3)IS和OS常用方法
InputStream是所有字节输入流的父类,其定义了基础的读取方法,如下:
int read():读取一个字节,以int形式返回,该int值的“低8位”有效,若返回值为-1则表示EOF
int read(byte[] d):尝试最多读取给定数组length个字节并存入该数组,返回值为实际读取到的字节量
OutputStream是所有字节输出流的父类,其定义了基础的写出方法,如下:
void write(int d):写出一个字节,写的是给定的int的“低8位”
void write(byte[] d):将给定的字节数组中的所有字节全部写出
4)创建FOS对象(重写模式)
FileOutputStream是文件的字节输出流,使用该流可以以字节为单位将数据写入文件。
FileOutputStream(File file):创建一个指定File对象表示的文件中写出数据的文件输出流
FileOutputStream(String filename):创建一个向具有指定名称的文件中写出数据的文件输出流
注意点:若指定的文件已经包含内容,那么当使用FOS对其写入数据时,会将该文件中原有的数据全部清楚。
案例1:FOS覆盖方式写文件
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("fos.txt");
String str = "Hello,World";
byte[] date = str.getBytes();
fos.write(date);
System.out.println("写出完毕");
fos.close();
}
}
5)创建FOS对象(追加模式)
若想在文件的原有数据之后追加新数据,则需要以下构造方法创建FOS:
FileOutputStream(File file,boolean append):创建一个向指定File对象表示的文件中写出数据的文件输出流
FileOutputStream(String filename,boolean append):创建一个向具有指定名称的文件中写出数据的文件输出流
以上两个构造方法中,第二个参数若为true,那么通过该FOS写出的数据都是在文件末尾追加的。
案例2:FOS追加模式写文件
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("fos.txt",true);
String str = "Hello,World";
byte[] date = str.getBytes();
fos.write(date);
System.out.println("写出完毕");
fos.close();
}
}
6)创建FIS对象
FileInputStream是文件的字节输入流,我们使用该流可以以字节为单位从文件中读取数据。FileInputStream有两个常用的构造方法,如下:
FileInputStream(File file):创建一个从指定file对象表示的文件中读取数据的文件输入流
FileInputStream(String name):创建用于读取给定的文件系统中的路径名name所指定的文件的文件输入流
案例3:FIS读取文件数据
import java.io.FileInputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("fos.txt");
int d = -1;
while((d=fis.read())!=-1){
System.out.print((char)d);
}
fis.close();
}
}
/*
* 运行结果:
* Hello,WorldHello,World
*/
7)read()和write(int d)方法
FileInputStream继承自InputStream,其提供了以字节为单位读取文XN/k9h`z+幯%9[\]K[[R[]X[N[\]K[S[[\]K[[]X[TXY\XX\TKKHKOXX]XXZ[[H\HS[KKHKO[R[]X[H\N][R[]X[J []X[TXY\\ N][]X[TXY\\[ NLN[J
NXY
JHINJ^KKHKO[K[
\Y
NO\J
NOO/c9 XN$y.yiK9n)h9$yde."9b9/XNke`yykyg[\]K[[S^[[\]K[[]\zd9kyg9:`(9yXN[]\[]
O[]\[H[JO9"y!eyg XN[]\[][O[]\[H[K[OXX\[[KKHKOXX]XXZ[[H\H[S^[KKHKO[]\N][]\ [ )y+[ m:-l:/[ "#9h[K[ 9J
NOOb9/ XN$)y`XN9d#)y`-iy#Id#d9kyaiyl9k :(c9ke,l,y"z(c9ayaiy+I/] 9a" 9d#l!-9l9k+,9"[\]K[Y\YXY\[\]K[[R[]X[N[\]K[S[[\]K[[]X[TXY\[\]K[[]\[\]K][[\XX\HKKHKOXX]XXZ[[H\HS[KKHKO[\[ N][\[K[N[K[ #N[[S[YH N[^[J
N[]\N][]\[S[YK [K[ ykN[JYJ^KKHKO[[H N[^[J
NY[K\]X[] ^KKHKOXZO[[JNO[K[ 9nJ
N[K[ NNNNNiyaykyleyNNNNN[R[]X[H\N][R[]X[J[S[YJN[]X[TXY\\ N][]X[TXY\\Y\YXY\ N]Y\YXY\\N[[H N[[J
[INXY[J
JHIN[
^KKHKO[K[[JNOJ
NOO/c9+#NK+ykNgd)y+.k.#ycc.#y/$O^]aya9nNNNNNiyaykyleyNNNNNgd)y+.k.#ycc.#y/$O]