------- android培训、java培训、期待与您交流! ----------
1.IO流的三种分类方式:
(1).按流的方向分为:输入流和输出流
(2).按流的数据单位不同分为:字节流和字符流
(3).按流的功能不同分为:节点流和处理流
2.IO流的四大抽象类:
字符流:Reader(读取流) Writer(写入流)
字节流:InputStream(读取流) OutputStream(写入流)
3.FileWriter操作文件
(1).文件的写入:
特点:
1.创建一个FileWriter对象时,必须明确被操作的文件(指定操作的文件名)
2.被操作的文件会被创建到指定目录下,如果该目录下已有同名文件,则会覆盖同名文件
例子:
import java.io.*;
class FileWriterDemo{
public static void main(String[] args) throws IOException{ //直接抛IO异常(只抛,不 处理)
FileWriter fw = new FileWriter("demo.txt"); //创建数据要存放的文件名和目的地
fw.write("abcde");//调用write方法,将字符串写入到流中
fw.flush(); //将数据刷新到目的地中
fw.close(); //关闭流资源,但关闭前会刷新一次内部缓冲中的数据
//flush()刷新后,流可以继续使用,close()刷新后,会将流关闭
}
}
(2).异常处理:
import java.io.*;
class FileWriterDemo{
public static void main(String[] args){
FileWriter fw = null;
try{ //此异常防止存入目的地失败(如指定目的地不存在)
fw = new FileWriter("e:\\demo.txt");
fw.write("abcde");
}catch(IOException e){
System.out.println(e.toString()); //io流异常的一种处理方式
}finally{ //finally块里的语句程序一定会执行
try{ //此异常处理fw.colse所产生的异常
if(fw != null) //此判断是防止fw对象初始化失败而产生的异常
fw.close(); //程序开启了多少个流资源,就要使用try方式使用close()关闭多 少次流资源
}catch(IOException e){
System.out.println(e.toString());
}
}
}
import java.io.*;
class FileWriterDemo{
public static void main(String[] args) throws IOException{ //直接抛IO异常(实际情况 要进行try,catch处理)
FileWriter fw = new FileWriter("demo.txt",true); //传递true参数,代表不覆盖已有 的文件,并在原文件末尾处进行数据续写
fw.write("abcde"); //写入数据
fw.write("nihao\r\nhaha"); // 其中\r\n代表换行功能
fw.close(); //关闭流资源
}
}
4.FileReader操作文件:
(1).文件的读取:
步骤:
1.创建一个文件读取流对象,和指定名称的文件相关联
2.要保证该文件是存在的,否则会发生FileNoundException异常
3.使用read()一次读取一个字符读取数据
例子1:
import java.io.*;
class FileReaderDemo{
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("demo.txt");
int ch = 0;
while((ch=fr.read()) != -1){ //当read读取到文件末尾时返回-1,所以可以以此判断
System.out.println((char)ch);
}
}
}
例子2:
通过字符数组进行读取(较优)
import java.io.*;
class FileReaderDemo{
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("demo.txt");
char[] buf = new char[1024]; //定义一个字符数组,用于存储读到的字符
int num = 0;
while((num=fr.read(buf)) != -1){ //该read(char[])返回的是读到字符个数
System.out.println(new String(buf,0,num)); //读到哪里就输出到哪里
}
fr.close();
}
}
(2).文件的拷贝:
例子1:
//一个个字节拷贝
import java.io.*;
class CopyText{
public static void main(String[] args) throws IOException{
copy_1();
}
public static void copy_1() throws IOException{
//创建目的地
FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");
//与已有文件关联
FileReader fr = new FileReader("RuntimeDemo.java");
int ch = 0;
while((ch=fr.read()) != -1){
fw.write(ch);
}
fw.close();
fr.close();
}
}
例子2:
//使用字符串数组拷贝
import java.io.*;
class CopyText{
public static void main(String[] args) throws IOException{
copy2();
}
public static void copy2(){
FileWriter fw = null;
FileReader fr = null;
try{ //此异常防止读写初始化失败
fw = new FileWriter("SystemDemo_copy.txt"); //创建接收被拷贝文件的数据 的文件名
fr = new FileReader("e:\\In.java"); //指定被拷贝文件的名称
char[] buf = new char[1024]; //数组存储读出的数据
int len = 0;
while((len=fr.read(buf)) != -1){
fw.write(buf,0,len); //一次性输出buf数组里的数据
}
}catch(IOException e){
throw new RuntimeException("读写失败");
}finally{
if(fw!=null)
try{
fw.close(); //关闭写入的流资源
}catch(IOException e){ }
if(fr!=null)
try{
fr.close(); //关闭读取的流资源
}catch(IOException e){ }
}
}
}
5.字节流操作文件
(1).复制一张图片:
步骤:
1.用字节流读取流对象和图片关联
2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3.通过循环读,完成数据的存储
4.关闭资源
例子:
import java.io.*;
class Copypic{
public static void main(String[] args){
FileOutputStream fos = null; //读出图片对象
FileInputStream fis = null; //写入图片对象
try{
fos = new FileOutputStream("c:\\2.bmp"); //要复制图片存放的位置
fis = new FileInputStream("c:\\1.bmp"); //指定被复制图片所在的位置
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf)) != -1){ //数组循环读取图片数据
fos.write(buf,0,len);
}
} catch(IOException e){
throw new RuntimeException("复制文件失败");
}finally{ //需要关闭两个流对象
try{
if(fis != 0) //判处对象初始化是否失败
fis.close();
}catch(IOException e){
throw new RuntimeException("读取文件失败");
}
try{
if(fos != 0)
fos.close();
}catch(IOException e){
throw new RuntimeException("写入文件失败");
}
}
}
}
6.File类操作文件
例子1:( 创建文件)
import java.io.*;
class FileDemo{
public static void main(String[] args) throws IOException{
consMethod();
}
public static void consMethod() throws IOException{
File f1 = new File("c:\\abc\\a.txt"); //方式一:将a.txt封装成File对象,可以将已有的和未出现的文件或者文件夹封装成对象
File f2 = new File("c:\\abc","b.txt"); //方式二:其中:,"b.txt"可以传其他参数,更灵 活
System.out.println("f1:"+f1); //打印文件路径
System.out.println("f2:"+f2);
}
}
例子2:(创建并删除文件)
import java.io.*;
class FileDemo{
public static void main(String[] args) throws IOException{
consMethod();
}
public static void method() throws IOException{
File f = new File("c:\\abc\\a.txt"); //创建对象
f.deleteOnExit(); //程序结束时,把创建的文件删除
System.out.println("delete:"+f.delete()); //输出delete:并删除文件,删除成功时返 回true,否则返回false
}
}
例子3:(判断文件)
import java.io.*;
class FileDemo{
public static void main(String[] args) throws IOException{
method();
}
public static void method() throws IOException{
File f = new File("file.txt"); //创建文件
System.out.println("exists:"+f.exists()); //判断文件是否存在,如果存在返回true,否则返 回false
File dir = new File("abc\\kkk"); //创建文件
System.out.println("mkdir:"+dir.mkdir()); //判断文件是否创建成功,如果成功返回true, 否则返回false
//.mkdir()创建文件夹,只能创建一级文件夹,创建多级文件夹使用:mkdirs();
}
}
例子4:(获取文件)
import java.io.*;
class FileDemo{
public static void main(String[] args) throws IOException{
method();
}
public static void method() throws IOException{
File f = new File("file.txt"); //创建文件
System.out.println("path:"+f.getpath()); //获取文件相对路径
System.out.println("abspath:"+f.getAbsolutepath()); //获取文件绝对路径
System.out.println("parent:"+f.getparent()); //返回绝对路径中的父目录,如果获取相对路径,返回null,如果相对目录有上一层 目录那么该目录就是返回结果
}
}
例子5:(删除文件夹)
import java.io.*;
class FileDemo{
public static void main(String[] args){
File dir = new File("d:\\test"); //指定要删除文件夹的路径和名称
removeDir(dir); //调用删除方法
}
public static void removeDir(File dir){ //递归删除
File[] files = dir.listFiles();
for(int x=0;x
if(files[x].isDirectory())
removeDir(files[x]);
System.out.println(files[x].toString()+":-file-:"+files[x].delete());
}
System.out.println(dir+"::dir::"+dir.delete());
}
}