`
文昌平蓝杰
  • 浏览: 54948 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

FIle类与IO流

阅读更多

java.io.File类是系统自带的类,可以对文件进行创建,删除,查找,判断等操作。

 

1.文件的概念

(1)文件名,文件名包括文件本身名称和扩展名,扩展名并不影响文件本身 ,他只是可以使文件有一个默认的打开方式,并不影响文件本身。

(2)文件格式,文件的格式是把一个文件通过不同的顺序或方法或形式存储起来的文件。跟打开方式相对应,每一种文件格式都有一种自己的打开方式,根据自己的顺序和方法和形式依次将文件呈现出来。一般用扩展名加以识别。

(3)文件分为目录文件和真实文件两种。

 

2.File file = new File(namepath);//在namepath目录下创建对象

   file.createNewFile();  //利用对象创建一个实际的File文件
   boolean bool = file.exists();   //判断file文件是否存在,并把结果返回
   if(bool){
	//如果文件是个目录
	if(file.isDirectory){
		System.out.println("文件是个目录");
		}
	//日过文件是个真实的文件
	else if(file.isFile){
		System.out.println("文件是个真实文件");		
		}
	}
   //如果文件不存在
   else{
	System.out.println("创建文件失败");
	}
 

以上是一个文件的基本处理方式,他反应了文件在程序中的处理方法,所以,操作系统对文件的处理不过是这样的一种方式的形象化。

 

3.利用递归遍历文件目录中的所有文件。

  递归思想是一种很重要的思想,因为有时候我们不知道循环需要什么时候结束,并且每一次都是想通规律是,就可以利用递归。

private int countFile(String path) {
		int count = 0; 
		//根据地址实例化文件
		File file = new File(path);
		//把文件的子文件用数组存储起来
		File[] lf = file.listFiles();
		//判断   即递归循环出口
		if(lf==null||lf.length==0){
			return 0;
		}
		//用循环找出文件个数
		for(int i=0;i<lf.length;i++){
			//如果是文件目录就进行深沉递归
			if(lf[i].isDirectory()){
				count += countFile(lf[i].getAbsolutePath());
			}
			//如果是文件名就直接打印出来
			else if(lf[i].isFile()||file.isHidden()){
				count++;
				ta.append("文件位置为"+lf[i].getAbsolutePath()+"\n");
			}
		}
		return count;
	}
 

IO流的解释:

对文件的读取与复制等功能,则要用到流的概念。

java中有IO,输入输出流:可以把一个文件的内容读出来,也可以把内容写入一个文件。

1.InputStream和OutputStream是最小的数据单位的流,一个字节为一个单位。

2.BufferedInputStream和BufferedOutputStream提供缓冲的缓冲流。

3.DataInputStream和DataOutputStream是基于具体数据的流。

4.ObjectInputStream和ObjectOutputStream是基于对象的流。

以上流从小到大,需要上一级的支持才能使用,比如未创建字节流,就无法创建缓冲流,缓冲流的创建以字节流对象为参数,依次类推。

如:

//创建文件输入流对象 为了方便统一,将其转化为父类对象

	InputStream IS = new FileInputStream(file);
	//根据字节流创建输入缓冲流
	BufferedInputStream bis = new BufferedInputStream(IS);
	//根据缓冲流创建数据流
	DataInputStream dis = new DataInputStream(bis);
	//根据数据流创建对象流
	ObjectInputStream ois = new ObjectInputStream(dis);
 

这样一级一级往上创建。

这些InputStream都有读取的方法可以读取文件内容,相应的OutputStream也有对应的方法写入内容:

private void copyFile(String path, String newpath) {
		// TODO Auto-generated method stub
		//根据地址创建文件
		File file = new File(path);
		File newfile = new File(newpath);
		try {
			//创建输入流对象
			InputStream IS = new FileInputStream(file);
			//创建输出流对象
			OutputStream OS = new FileOutputStream(newfile);
			//构造输入缓冲流
			BufferedInputStream bis = new BufferedInputStream(IS);
			//构造输出缓冲流
			BufferedOutputStream bos = new BufferedOutputStream(OS);
			//求出文件长度
			int length = bis.available();
			byte[] arriy = new byte[length];
			//把文件读入到固定的数组中去
			bis.read(arriy);
			//将数组内容转化成字符串
			String str = new String(arriy);
			//将数组内容读入到指定文件时
			bos.write(arriy);
			//关闭各种流
			bos.close();
			OS.close();
			bis.close();
			IS.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

这样就就实现了一个基本的复制功能,其实IO也就是用于数据的传输,只要需要读写的地方,就会用到IO着一块,以上其实也是IO中的一些方法的调用,值得注意的是,各种流在创建过后,最后一定要记得关闭,否则会有一部分文件依然在缓存中未被写入。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics