IO流的分类:
按照流的方向可以分为:输入流和输出流;
按照流的数据类型来分:字节流和字符流;
字节流->输入流:InputStream 输出流:OutputStream
字符流-> 输入流:Reader 输出流:Writer
一切皆字节:计算机中的任何数据(文本、图片、视频、音乐)都是以二进制的形式存储的,在数据传输时,也都是以二进制的形式存储的,后续学习的任何流,在传输时底层都是二进制。
Java.io.FileOutputStream
文件输出流是用于将数据写入File或FileDescriptor的输出流。 文件是否可用或是否可以创建取决于底层平台。
public class OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("d://a.txt");
byte[] bytes = {65,66,67,68};
fos.write(bytes);
fos.close();
System.out.println("已经写出");
}
}
输出结果:
D盘生成了一个新文件a.txt,且里面写了内容ABCD.
若是想在文件里面追加新内容,FileOutputStream里面可以加上true,这表示追加新内容。
FileOutputStream fos = new FileOutputStream("d://a.txt",true);
public class OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("d://a.txt",true);
//将ABCDE转成字节
byte[] bytes = "ABCDE".getBytes();
//从ABCDE的第一位开始,写两位,即AB
fos.write(bytes,0,2);
fos.close();
System.out.println("已经写出");
}
}
输出结果:ABCDAB
FileInputStream
是InputStream用的最多的一个子类,用于读取诸如图像数据的原始字节流
public class OutputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("d://a.txt");
//从此输入流中读取一个字节的文件
byte b =(byte) fis.read();
System.out.println(b);
fis.close();
}
}
输出结果:65
如果想读出文件里的全部,可以使用循环:
public class OutputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("d://a.txt");
//从此输入流中读取一个字节的文件
while (true){
byte b = (byte)fis.read();
//一共可以输出255个,当文件里的内容全都读完了,则输出-1
if (b == -1){
break;
}
System.out.println((char) b);
}
fis.close();
}
}
输出结果:A B C D A B