IO流对象中输入和输出是相辅相成的,输出什么,就可以输入什么.
IO的命名方式为前半部分能干什么,后半部分是父类的名字. (FileOutputStream 文件输出流)
java->JVM->OS
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
}catch (IOException e) {
System.out.println(e.toString() + "----");
} finally {
//一定要判断fos是否为null,只有不为null时,才可以关闭资源
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException("");
}
}
}
流的构造方法可以创建文件 默认如果存在相同的文件,会覆盖, 可以设置 boolean append来修改位追加内容
写入文件方式(换行符的方法 /r/n)
FileOutputStream fos = new FileOutputStream("c:\\a.txt");
//流对象的方法write写数据
//写1个字节
fos.write(97);
//关闭资源
fos.close();
byte[] bytes = {65,66,67,68};
fos.write(bytes);
//写字节数组的一部分,开始索引,写几个
fos.write(bytes, 1, 2);
//写入字节数组的简便方式
//写字符串
fos.write("hello".getBytes());
//关闭资源
fos.close();
所有输入流的超类, 一次读取一个字节
数组读取内容的方式
循环的方式来读取文件内容
FileInputStream fis = new FileInputStream("c:\\a.txt");
//创建字节数组
byte[] b = new byte[1024];
int len = 0 ;
while( (len = fis.read(b)) !=-1){ // 将字符读到了byte数组中,如果到了文件结尾会返回-1
System.out.print(new String(b,0,len));
}
fis.close();
创建一个输入流,创建一个输出流,从输入流读取字符同时将字符写入到目标文件
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("c:\\t.zip");
fos = new FileOutputStream("d:\\t.zip");
//定义字节数组,缓冲
byte[] bytes = new byte[1024*10];
//读取数组,写入数组
int len = 0 ;
while((len = fis.read(bytes))!=-1){
fos.write(bytes, 0, len);
}
}catch(IOException ex){
throw new RuntimeException("文件复制失败");
}finally{
try{ // 需要将两个流关闭的方式全部用try/catch因为如果一下流出现异常,那么另一个流也需要关闭
if(fos!=null)
fos.close();
}catch(IOException ex){
throw new RuntimeException("释放资源失败");
}finally{
try{
if(fis!=null)
fis.close();
}catch(IOException ex){
throw new RuntimeException("释放资源失败");
}
}
}
字符输出数组的超类
写入字符流以后必须进行flush()刷新 Close()会自动刷新(不提倡)
FileWriter fw = new FileWriter("c:\\1.txt");
//写1个字符
fw.write(100);
fw.flush();
//写1个字符数组
char[] c = {'a','b','c','d','e'};
fw.write(c);
fw.flush();
//写字符数组一部分
fw.write(c, 2, 2);
fw.flush();
//写如字符串
fw.write("hello");
fw.flush();
fw.close();
所有字符输入流的超类
FileReader fr = new FileReader("c:\\1.txt");
/*int len = 0 ;
while((len = fr.read())!=-1){
System.out.print((char)len);
}*/
char[] ch = new char[1024];
int len = 0 ;
while((len = fr.read(ch))!=-1){
System.out.print(new String(ch,0,len));
}
fr.close();