1.IO:Input/Output
输入:读操作,将磁盘上的内容读取到程序中
输出:写操作,将程序中的内容写到磁盘上,在流进行读写文件的时候,便于文件开通了一条管道,所以在使用完流之后要将流关闭(也就是将管道关闭)
2.IO的分类:
1)按流向分:
输入流和输出流
2)按单位分:
字节流和字符流
3)按功能分:
高级流和低级流
3.字节输入输出流InputStream(输入流)和OutputStream(输出流):字节输入输出流(抽象类、字节输入输出流的顶级父类)
4.FileOutputStream方法:
①FileOutputStream(File file):FileOutputStream构造方法,参数为File对象,如果文件不存在,系统会自动创建一个新的文件
②FileOutputStream(String name):FileOutputStream构造方法,参数为文件名,除绝对地址外,.或者只写文件名均表示在当前工作空间中创建文件
③FileOutputStream(String name,boolean append):FileOutputStream构造方法,参数为文件名与一布尔值,表示当写入内容时是否覆盖文件写入之前内容,如果为true则不覆盖,false为覆盖
④FileOutputStream(File file,boolean append):FileOutputStream构造方法,参数为File对象与一布尔值
⑤void write(int b):向文件内写入,参数为int值,文件中显示的为ASCII码所对应的字符,且该方法输入以字节为单位,每次输入一个字节,int值为32为四字节,但是write为单字节输入,即每次输入八位,所以输入值为int值的32位二进制数的低八位。
⑥void write(byte[] b):向文件内写入,参数为字节数组,可向目标文件中同时写入多个字节
⑦void write(byte[] b,int off,int len):向文件内写入,参数为字节数组,两个int值,off表示从字节数组的哪一位开始,len表示向目标文件内输入的字节数组的长度
⑧void close():关闭流
5.FileInputStream方法:
①FileInputStream(File file):FileInputStream构造方法,参数为File对象
②FileInputStream(String name):FileInputStream构造方法,参数为文件名
③int read():读文件内容,该方法以字节为单位读出,每次读出一个字节,如果已经读到该文件的末尾,则读方法返回-1
④int read(byte[] b):读文件内容,参数为字节数组,可同时读出多个字节,如果文件的字节数大于1024,那么该方法的返回值就是1024,如果文件的字节数小于1024,那么该方法的返回值就是文件的实际大小
⑤int read(byte[] b,int off,int len):读文件内容,参数为字节数组,两个int值,off表示从字节数组的哪一位开始,len表示从目标文件内读出的字节数组的长度
⑥void close():关闭流
例一:
①
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo1 {
public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream("b.txt");
fos.write(65);
fos.close();
}
}
结果:
②将文件内容读出
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo1 {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("b.txt");
int a=fis.read();
System.out.println(a);
fis.close();
}
}
结果:65
例二:
①将260写入到文件中(>>右移符号,<<左移符号,|或运算符号)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo2 {
public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream("a.txt");
int a=260;
int b=a>>8;
//00000000 00000000 00000000 00000001
fos.write(b);
//00000000 00000000 00000001 00000100
fos.write(a);
fos.close();
}
}
结果:
②将读出260
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo1 {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("a.txt");
int m=fis.read()<<8|fis.read();
System.out.println(m);
fis.close();
}
}
结果:260
例三:
①将int最大值写入
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo3 {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
fos=new FileOutputStream("a.txt");
int a=Integer.MAX_VALUE;
int b=a>>8;
int c=b>>8;
int d=c>>8;
fos.write(d);
fos.write(c);
fos.write(b);
fos.write(a);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
结果:,由于为空白字符,所以用鼠标选中来体现
②读出文件内容
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo3 {
public static void main(String[] args) {
FileInputStream fis=null;
try {
fis=new FileInputStream("a.txt");
int m=fis.read()<<24|fis.read()<<16|fis.read()<<8|fis.read();
System.out.println(m);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:2147483647
例四:
①一次性写入一个字节数组
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo4 {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
fos=new FileOutputStream("a.txt");
String str="大家好";
fos.write(str.getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
if(fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
结果:,String类中提供将字符串变为字节数组方法getBytes()
②读出文件内容
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo4 {
public static void main(String[] args) {
FileInputStream fis=null;
try {
fis=new FileInputStream("a.txt");
byte[] bs=new byte[1024];
int len=fis.read(bs);
String str=new String(bs,0,len);
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}finally {
if(fis!=null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
结果:大家好,String有一构造方法为String(byte[] bytes,int offset,int length),可将字节数组转换为字符串,offset为开始位置,length为转换长度即转换多少字节
例五:用FileOutputStream和FileInputStream复制文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("Copy.txt");
fos=new FileOutputStream("Copy1.txt");
byte[] bs=new byte[1024*10];
int len=0;//用来存放实际读到的字节数
while((len=fis.read(bs))>0) {
fos.write(bs,0,len);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
if(fis!=null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
结果:
总结: