一、什么是io流?
在 Java 中所有数据都是使用流读写的。流是一组有序的数据序列,将数据从一个地方带到另一个地方。根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种。
二、字节输入流【InputStream】
java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。
1.关闭此输入流并释放与此流相关的任何系统资源。
public void close();
2.从输入流读取数据的下一个字节
public abstract int read();
3.从输入流中读取一些字节数,并将他们存储到字节数组b中
public int read(byte[]b);
三、字节输出流【OutputStream】
在 Java 中所有输出流类都是 OutputStream 抽象类(字节输出流)和 Writer 抽象类(字符输出流)的子类。
四、FileInputStream类
java.io.FileInputStream 类是文件输入流,从文件中读取字节
public static void main(String[] args) throws IOException {
//输入流:内存的内容输出到文件(写操作) 输出流:文件内容输入到内存中(读操作)
File f1=new File("C:/aa");
f1.mkdirs();
File f2=new File(f1,"a.txt");
f2.createNewFile();
InputStream input= new FileInputStream(f2);
//读取文件的一个字符,然后把字符转换为对于的数字返回,如果读取到文件尾部,返回-1
int n;
while((n=input.read())!=-1){
System.out.println((char)n);
}
}
使用read(byte [] b) 缓冲区循环读取内容
public static void main(String[] args) throws IOException {
//输入流:内存的内容输出到文件(写操作) 输出流:文件内容输入到内存中(读操作)
File f1=new File("C:/aa");
f1.mkdirs();
File f2=new File(f1,"a.txt");
f2.createNewFile();
InputStream input= new FileInputStream(f2);
//读取文件的一个字符,然后把字符转换为对于的数字返回,如果读取到文件尾部,返回-1
int n;
byte[] b=new byte[10];
//使用read(byte [] b) 缓冲区循环读取内容
while((n=input.read(b))!=-1){
String s=new String(b,0,n);//从0开始,截取有效的字节n
System.out.println(s);
}
}
五、FileOutputStream类
java.io.FileOutputStream 类是文件输出流,往内存中写入字节
写入数据的时候如果需要以追加的内容:
new FileOutputStream(file,true)
1.通过scanner键盘输出内容
public static void main(String[] args) throws IOException {
//输入流:内存的内容输出到文件(写操作) 输出流:文件内容输入到内存中(读操作)
File f1=new File("C:/aa");
f1.mkdirs();
File f2=new File(f1,"b.txt");
f2.createNewFile();
OutputStream out=new FileOutputStream(f2,true);
Scanner sc=new Scanner(System.in);
System.out.println("请输入:");
String msg=sc.next();
byte[]bytes =msg.getBytes();//获取字符串,解析成btye数组
System.out.println(Arrays.toString(bytes));
out.write(bytes);
}
2.直接输出指定内容
public static void main(String[] args) throws IOException {
//输入流:内存的内容输出到文件(写操作) 输出流:文件内容输入到内存中(读操作)
File f1=new File("C:/aa");
f1.mkdirs();
File f2=new File(f1,"b.txt");
f2.createNewFile();
OutputStream out=new FileOutputStream(f2,true);
String msg="爱你就在一瞬间!";
byte[]bytes =msg.getBytes();//获取字符串,解析成btye数组
System.out.println(Arrays.toString(bytes));
out.write(bytes);
}
五、案例(复制内容到内存中)
可以进行复制图片文字和记事本
public static void main(String[] args) throws IOException {
File f1=new File("C:/aa");
File f2=new File(f1,"c.txt");
//创建目的文件
f2.createNewFile();
//复制源
File f3=new File("C:/aa/b.txt");
//定义输入输出流
InputStream in=new FileInputStream(f3);
OutputStream out=new FileOutputStream(f2);
//进行输入输出
byte[] buffer=new byte[10];
int n=0;
while ((n=in.read(buffer)) !=-1){
out.write(buffer,0,n);
}
}