编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下, 并将原来文件的扩展名从.java改为.jad。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
/**
 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,
 并将原来文件的扩展名从.java改为.jad。
 * @author JHL
 * 	
 *
 */
public class Demo2 {
	public static void main(String[] args) {
		FileInputStream fis=null;
		FileOutputStream fos=null;
//1.读取\java下所有.java文件
		File fjava=new File("D:\\test\\java");
		if(!(fjava.exists()&&fjava.isDirectory())){//校验
			System.out.println("file not exists or is Directory!");
		}
		//找到对应目录下所有的.java文件
		File[] bl=fjava.listFiles(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				return name.endsWith(".java");
			}
		});
//2.改扩展名,复制到\jad下,并复制每个文件中的内容
		File fjad=new File("D:\\test\\jad");
		if(!(fjad.exists())) fjad.mkdir();//不存在创建jad
		for(File result:bl) {
			try {
				 fis=new FileInputStream(result);
				//用给定的替换替换与给定的regular expression匹配的此字符串的每个子字符串。 
				String changeFileName=result.getName().replaceAll("\\.java$", ".jad");
				//public File(File parent,String child)从父抽象路径名和子路径名字符串创建新的File实例。
				//将changeFileName写入到fjad文件下,并为其实例一个文件输出流对象
				fos=new FileOutputStream(new File(fjad,changeFileName));
				copy(fis,fos);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				if(fis!=null) {
					try {
						fis.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(fos!=null) {
					try {
						fos.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		
}
	/**
	 * public int read(byte[] b)
         throws IOException从输入流读取一些字节数,并将它们存储到缓冲区b 。 
         实际读取的字节数作为整数返回。 该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。 
	如果b的长度为零,则不会读取字节并返回0 ; 否则,尝试读取至少一个字节。 
	如果没有字节可用,因为流在文件末尾,则返回值-1 ; 否则,读取至少一个字节并存储到b 。 
	第一个字节读取存储在元素b[0] ,下一个字节存入b[1]等等。
	 读取的字节数最多等于b的长度。 令k为实际读取的字节数; 
	 这些字节将存储在元素b[0]至b[ k -1] ,使元素b[ k ]至b[b.length-1]不受影响。

	 * @param fips
	 * @param fops
	 */
public static void copy(FileInputStream fips,FileOutputStream fops){//复制每个文件中的内容
	int len=0;
	byte[] buf=new byte[1024];
	try {
		while((len=fips.read(buf))!=-1) {
		fops.write(buf, 0, len);
		//write(b, off, len)的一般合同是数组b中的一些字节按顺序写入输出流; 元素b[off]是写入的第一个字节, b[off+len-1]是此操作写入的最后一个字节。 
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}


}
发布了63 篇原创文章 · 获赞 17 · 访问量 4102

猜你喜欢

转载自blog.csdn.net/Bonport/article/details/103006268
今日推荐