Lesson_22_Note_java IO系统(上)

package Lesson_22;

/**************************************************************
 * 							2013.3.24
 * 				 	        java IO系统(上)
 * 					  	   @author Gavin
 **************************************************************/
/***************************课堂内容***************************
 * 1、java.io包也是Java内置的包,其中包含一系列对文件和目录的属性进行操作,
 * 		对文件进行读写操作的类,程序中用到这些包中的类,需要导包
 * 2、File类:
 *       --->在程序中一个File类对象可以代表一个文件或目录
 *       --->当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作,
 *       		如:文件名、最后修改日期、文件大小等等
 *       --->需要注意的是,File对象并不能直接对文件进行读/写操作,只能查看文件的属性
 * 3、File类常用的构造方法
 * 		--->File(String pathname)  指定文件(或目录)名和路径创建文件对象
 * 			如:
 *			//在当前目录下创建一个与aaa.txt文件名相关联的文件对象
 *				File f1 = new File("aaa.txt");
 *			//指明详细的路径以及文件名,请注意双斜线
 *				File f2 = new File("D:\\Java\\Hello.java");
 * 4、File类中常用的方法
 * 		--->boolean exists()  判断文件是否存在,存在返回true,否则返回false
 * 		--->boolean isFile()  判断是否为文件,是文件返回true,否则返回false
 * 		--->boolean isDirectory()	判断是否为目录,是目录返回true,否则返回false
 * 		--->String getName()	获得文件的名称
 * 		--->String getAbsolutePath()	获得文件的绝对路径
 * 		--->long length()		获得文件的长度(字节数)
 * 		--->boolean createNewFile()throws IOException
 * 		创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉
 * 		--->boolean delete()	删除文件,删除成功返回true,否则返回false
 * 5、stream(流)
 * 		--->流是指一连串流动的数据信号,是以先进先出的方式发送和接收数据的通道。
 * 		--->根据流动方向的不同,流分为输入流和输出流
 * 		--->对于输入和输出流,由于传输格式的不同,又分为字节流和字符流
 * 			--->字节流是指8位的通用字节流,以字节为基本单位,在java.io包中,
 * 				对于字节流进行操作的类大部分继承于InputStream(输入字节流)类
 * 				和OutputStream(输出字节流)类
 * 			--->字符流是指16位的Unicode字符流,以字符(两个字节)为基本单位,
 * 				非常适合处理字符串和文本,对于字符流进行操作的类大部分继承于
 * 				Reader(读取流)类和Writer(写入流)类
 * 6、FileInputStream类称为文件输入流,继承于InputStream类,是进行文件读操作的最基本类
 * 		--->它的作用是将文件中的数据输入到内存中,我们可以利用它来读文件
 * 		--->由于它属于字节流,因此在读取Unicode字符(如中文)的文件时可能会出现问题
 * 7、FileInputStream类常用的构造方法	
 * 		--->FileInputStream(File file) throws FileNotFoundException
 * 			使用File对象创建文件输入流对象,如果文件打开失败,将抛出异常
 * 		--->FileInputStream(String name)  throws FileNotFoundException
 * 			使用文件名或路径创建文件输入流对象,如果文件打开失败,将抛出异常
 * 8、FileInputStream类常用的方法
 * 		--->int read() throws IOException
 * 			读取文件中的数据,一次读取一个字节,读取的数据作为返回值返回,
 * 			如果读到文件末尾则返回-1,有可能抛异常,必须捕捉
 * 		--->int read(byte[] b) throws IOException
 * 			读取文件中的数据,将读到的数据存放到byte型数组中,并返回读取
 * 			的字节的数量,未读到数据返回-1,有可能抛异常,必须捕捉
 * 9、FileOutputStream类称为文件输出流,继承于OutputStream类,是进行文件写操作的最基本类
 * 		--->它的作用是将内存中的数据输出到文件中,我们可以利用它来写文件
 * 10、FileOutputStream类常用的构造方法
 * 		--->FileOutputStream(File file)	throws FileNotFoundException
 * 			使用File对象创建文件输出流对象,如果文件打开失败,将抛出异常
 * 		--->FileOutputStream(File file, boolean append) throws FileNotFoundException
 * 			使用File对象创建文件输出流对象,并由参数append指定是否追加文件内容,true为追加,
 * 			false为不追加,异常情况同上
 * 		--->FileOutputStream(String name)  throws FileNotFoundException
 * 			直接使用文件名或路径创建文件输出流对象,异常情况同上
 * 		--->FileOutputStream(String name, boolean append)  throws FileNotFoundException
 * 			直接使用文件名或路径创建文件输出流对象,并由参数append指定是否追加,异常情况同上
 * 11、FileOutputStream类常用的方法
 * 		--->void write(int b)  throws IOException
 * 		往文件中写数据,一次写一个字节,有可能抛异常,必须捕捉
 * 		--->void write(byte[] b)   throws IOException
 * 		往文件中写数据,将byte数组中的数据全部写入到文件中,有可能抛异常,必须捕捉
 * 		--->void close()   throws IOException
 * 		关闭流对象,有可能抛异常,必须捕捉
 * 12、*FileInputStream类和FileOutputStream类是成对出现的,
 * 		一个进行输入(读文件)操作,一个进行输出(写文件)操作
 * 	   *由于采用字节方式进行数据传输,不必考虑数据的格式问题,这两个类对文件操作的效率较高
 * 	   *可以使用这两个类完成复制文件的操作
 * ***********************************************************/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

public class Day3_24 {
	
	public static void main(String[] args) throws Exception {//主方法抛出异常
		findImagesIncludeSubDirectory(new File("E:\\Picture"));
		readFile();
		findImages();
		
	}
	
	public static void findImages() throws Exception{
		//课堂练习1:找出一个文件夹下所有的图片文件(jpg)
		String directory = "E:\\Picture";//定义文件夹的名称
		File dire=new File (directory);//实例化一个文件对象,该文件指向该目录
		if(dire.exists()){//判断是否存在
			if(dire.isDirectory()){//判断是否是个文件夹
				File [] files=dire.listFiles();//返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件
				for(File name:files){//for each循环,将文件名输出
					if(name.getName().toLowerCase().endsWith(".jpg")){//判断是否是以.jpg结尾或者以.JPG结尾的
						System.out.print(" "+new Date(name.lastModified()).toLocaleString());//并输出最后修改时间
						System.out.println("\t"+name.getName()+"\t\t"+name.length());//输出文件名及文件大小(以字节为单位)
						System.out.println(name.getAbsolutePath());//三个都是得到路径名,区别?
						System.out.println(name.getCanonicalPath());
						System.out.println(name.getPath());
					}
				}
			}
		}
	}
	
	public static void findImagesIncludeSubDirectory(File f){
		//课堂练习2:找出一个文件夹下及其子文件夹下的所有图片文件
		//递归实现:写一个方法,有参数,参数是文件类型
		if(f.exists()){//如果文件存在
			if(f.isDirectory()){//如果是文件夹
				System.out.println(f.getAbsolutePath());//输出绝对路径
				for(File t: f.listFiles()){//如果是文件夹,则列出当前文件夹下的所有文件(含文件夹)
						findImagesIncludeSubDirectory(t);
				}
			}else{//如果是文件
				System.out.print(new Date(f.lastModified()).toLocaleString()+" ");//输出最后修改时间
				System.out.println(f.getAbsoluteFile());//输出文件名
			}
		}
	}
	
	public static void readFile() throws IOException{
		File file=new File("readme.dat");//定义一个文件file对象,关联到readme.dat文件
		if(!file.exists()){ //若文件不存在,就创建一个新的
			file.createNewFile();
		}
		//文件输出流
		FileOutputStream fos=new FileOutputStream(file);//定义一个文件输出流,关联到文件file对象
		String str="asdfasdfsdfaasf";
		fos.write(str.getBytes());//往文件写入数据,若文件之前存在数据,这时会把文件之前的数据清除
//		若之前定义的是FileOutputStream fos = new FileOutputStream(file,true);则会把写入的数据追加到文件的末尾
		fos.flush();//清除缓存
		fos.close();//关闭流
		
		FileInputStream fin=new FileInputStream(file);//定义一个文件流-->字节流
		byte[] bytes=new byte[(int)file.length()];//定义一个字节数组,长度是file的长度,
												//file.length()返回一个long型,故要转换成int型
		while((fin.read(bytes))!=-1){//每次一个数组大小,读取文件中的数据存放到字节数组中
			System.out.println(new String(bytes));//利用字节数组创建字符串并输出
			System.out.println(new String(bytes,"utf-8"));//utf-8表示一种编码,可以输出汉字
		}
		fin.close();//关闭流
//		int n=fin.read();//读取文件(每次一字节)、这样效率较低
//		while(n!=-1){
//			System.out.print((char)n);
//			n=fin.read();
//		}
		
//		 for (int i = 0; i < file.length(); i++) {
//		        char ch = (char)(fin.read());  //循环读取字符
//		        System.out.print(ch);
//		      }
	}
		
}

				

你可能感兴趣的:(Lesson_22_Note_java IO系统(上))