黑马程序员_IO流

 ------- 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());
		}
	}
}


(3).文件的续写:


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());
	} 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值