一,字节流和输入输出:
1.根据数据的流向分为:输入流和输出流 2.格局数据的类型分为:字节流和字符流
输出流 : 把数据从 内存 中写出到 其他设备 上的流
源代码:
public static void main(String[] args) throws IOException {
//输出流:,内存的内容输出到文件(与操作)入流:文件内容输入到内存中(读操作)
File f1=new File("d:/a.txt");
//创建一个输入流,读取f1这个文件
InputStream input=new FileInputStream(f1);
//读取文件的一个字符,然后把字符转换为对应的数字返回。如果读取到文件的末尾,返回的是-1
int n;
while((n=input.read())!=-1){
System.out.println((char)n);
}
}
输入流 : 把数据从 其他设备 上读取到 内存 中的流
源代码:
public static void main(String[] args) throws IOException {
File f1=new File("d:/来自一个爱你的表白.txt");
f1.createNewFile();
OutputStream out=new FileOutputStream(f1);
Scanner sc=new Scanner(System.in);
System.out.println("请输入:");
String msg=sc.next();
byte[] bytes = msg.getBytes();//获字串对应解析后的 byte 数组out.write(bytes);
//定义一个String,把字符串的内容写入到电脑的磁盘中
String mgs="爱你在每一个你不知道的瞬间!";
byte[] byt = mgs.getBytes(); //获取字符串 解析后的 byte数组
out.write(byt); //把yte数组写入文件,相当于把字符串写入文件中
}
字节流 : 以字节为单位,读写数据的流。
字符流 : 以字符为单位,读写数据的流。
二,顶级父类
输入流 | 输出流 | |
字节流 | lnputStream | OutputStream |
字符流 | Reade | Writer |
三,FileOutputStream和OutputStream类
1.FileOutputStream
构造方法:
- public FileOutputStream(String name):创建文件输出流 以指定名称写入文件
- public FileOutputStream(File file):创建文件输出流,以指定的File对象表示的文件进行写入
2.成员方法:
- public void close():关闭此输出流并释放与此流相关联的任何系统资源
close方法,当完成流的操作时,必须调用此方法,释放系统资源,否则数据写入不完整或消失
- public abstract void write(int b):将指定的字节写入输出流
- public void write(byte b[]):将 b.length字节从指定的字节数组写入到此输出流中
- public void write(byte b[], int off,int len):将指定范围的字节数组的字节数据写到此输出流中
四,io
我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output,即流向内存是输入流,流出内存的输出流。
Java中I/O操作主要是指使用 java,io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。
文件的复制:
源代码:
package FilePack;
import java.io.*;
public class FileCopy {
public static void main(String[] args) throws IOException {
File f1=new File("D:/a.jpg");
File newFile=new File("D:/aa/copy.jpg");
//2.创建目的文件
newFile.createNewFile();
//3.定义输入输出流:使用输入流读取内容使用输出流写入内容
InputStream in=new FileInputStream(f1);
OutputStream out=new FileOutputStream(newFile);
/*
//4.循环读取文件内容,同时写入指定的文件中
int n;
while ((n=in.read())!=-1) {
out.write(n);
}
//实际工作中推荐写法
byte[] buffer=new byte[10];
int n=0;
while( (n=in.read(buffer)) != -1){
out.write(buffer,0,n); //buffer数组从0开始,截取读取到有效字节数n 写入到目的文件中
}
*/
//联系时容易理解的方式
byte[] buffer=new byte[10];
int n=0;
while(true) {
n = in.read(buffer); //读取文件,内容放Abuffer数组中,返回的是实际读取的字节数
if(n!=-1) {
out.write(buffer,0,n); //buffer数组从0开始,裁取读取到有效字节数n 写入到目的文件中
}else {
break;
}
}
}
}