A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hysnxdss 中级黑马   /  2016-9-26 21:13  /  1847 人查看  /  25 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,
拷贝成功后,把后缀名是.java的改成.txt

25 个回复

倒序浏览
大神们呢???
这道题怎么做呢?
思路是什么
回复 使用道具 举报
这不是类似我们昨天作业吗。。。。。不会是我们班同学吧,嘻嘻
回复 使用道具 举报
递归是必须的   用过滤器把.java文件都加载复制   再遍历复制过来的文件夹   listFiles()差不多这个方法  方法名有点忘了
回复 使用道具 举报
babysa 发表于 2016-9-27 12:56
这不是类似我们昨天作业吗。。。。。不会是我们班同学吧,嘻嘻

大神哪个班的
回复 使用道具 举报
要递归,因为传入的是一个文件夹路径,文件夹里面可能有文件和文件夹,如果是符合.java的文件就改它后缀,如果是文件夹的话就继续调用方法判端和修改,然后就是无限的递归了......
回复 使用道具 举报
我前几天刚做过这道题,关键是: 先复制, 后改名
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
题目:
        编写一个程序,将指定目录下所有.java文件拷贝到另一个目录中,
        并将扩展名改为.txt       
思路:
        1、用File对象封装目录
        2、通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
        3、遍历这个File数组,得到每一个File对象
        4、判断该File对象是否是文件
                a、如果是文件
                b、继续判断是否以.java结尾
                        是:先改名后复制文件
                        否:不复制
                       
        总结: 先复制, 后改名
*/
public class Prictice2 {
        public static void main(String[] args) throws IOException {
                File file = new File("D:\\new_test");
                // 调用方法,遍历文件或文件夹,将所有.java后缀的改为.txt,随后复制给E盘Test文件夹中
                lookFiles(file);
                System.out.println("先复制.java文件,随后写入文件夹Test时,将文件后缀写为: .txt, 完毕");
        }

        private static void lookFiles(File file) throws IOException {
                // 使用listFiles()遍历文件
                File[] files = file.listFiles();
                for (File f : files) {
                        if(f.isFile()) {
                                if(f.getName().endsWith(".java")) {
                                        // 取得它的小数点的角标
                                        int index = f.getAbsolutePath().lastIndexOf(".");
                                        // 利用角标,截取字符串
                                        String str = f.getAbsolutePath().substring(index);
                                        // 将.java后缀 替换成 .txt
                                        String newFileName = f.getName().replace(str, ".txt");
                                       
                                        // renameTo(File f)方法怎么用? 答: 里面传文件
                                        // 调用拷贝方法
                                        copyFiles(f, newFileName);
                                }
                        } else {
                                // 递归调用方法,是文件夹的话继续遍历
                                lookFiles(f);
                        }
                }
        }
        // 复制文件方法
        private static void copyFiles(File file, String newFileName) throws IOException {
                File newFile = new File("E:\\Test", newFileName);

                // 1.创建流
                BufferedReader br = new BufferedReader(new FileReader(file));
                BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
                // 2.写入数据
                // a.声明有效长度
                int len;
                // b.声明字符数组
                char[] ch_arr = new char[1024];
                while((len = br.read(ch_arr)) != -1) {
                        // 写入数据
                        bw.write(ch_arr, 0, len);
                       
                }
                // 3.关闭资源
                bw.close();
                br.close();
        }
}
回复 使用道具 举报
其实用Files类的话要比旧的File类迭代目录要容易一些,Files类设计了可以把目录生成一个Iterable迭代器对象,还可以用glob模式过滤文件,glob的模式和windows的通配符很相似,像要找以java结尾的文件用*.java就可以了非常方便
回复 使用道具 举报
同学吧..........和我作业一模一样...

这道题.
要用递归,最主要的是要创建文件夹.
回复 使用道具 举报

没有大神  javase  双元
回复 使用道具 举报
[Java] 纯文本查看 复制代码
public class Test {

	/**
	 * 
	 * @author ZhangYiLing
	 * 
	 */
	public static void main(String[] args) throws IOException {
		//源文件目录
		File srcName = new File("D:\\文档");
		//目标文件目录
		File destName = new File("E:\\test4");
		//判断目的地文件夹是否存在,如不存在则创建它
		if (!destName.exists()) {
			destName.mkdir();
		}
		
		//调用文件夹复制功能
		copyFolder(srcName,destName);
	}

	private static void copyFolder(File srcName, File destName) throws IOException {
		//判断srcName对象是否为文件夹,如果不是则复制里面的所有文件.
		if (srcName.isDirectory()) {
			//建立目的地文件夹路径
			File newFolder = new File(destName,srcName.getName());
			//创建目的地文件夹
			newFolder.mkdir();
			//获取源地址文件夹数组
			File [] folderArray = srcName.listFiles();
			//使用增强for循环获取源地址每一个文件夹
			for(File file: folderArray) {
				//使用递归,继续获取源地址文件夹路径名称后创建到目的地路径文件夹
				copyFolder(file,newFolder);
			}
			
		// 过滤非java文件
		} else if (srcName.isFile() && srcName.getName().endsWith(".java")){
			// 将java文件的后缀名替换为txt
			String destTxt = srcName.getName().replace(".java", ".txt");
			//创建一个新的文件对象用于指定输出文件路径
			File newFile = new File(destName,destTxt);
			copyFile(srcName,newFile);
		}
	}

	private static void copyFile(File srcName, File newFile) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcName));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
		
		byte [] bys = new byte[1024];
		int len = 0;
		while((len = bis.read(bys)) != -1){
			bos.write(bys,0,len);
		}
		
		bos.close();
		bis.close();
	}
}
回复 使用道具 举报
以为目前学到的知识来说,是需要用递归的
回复 使用道具 举报
Fate_stay 发表于 2016-9-27 17:18
我前几天刚做过这道题,关键是: 先复制, 后改名
import java.io.BufferedReader;
import java.io.BufferedWr ...

可以,可以,很强,比我写的好多啦,受教啦
回复 使用道具 举报
babysa 发表于 2016-9-28 22:43
没有大神  javase  双元

我也是  javase  双元  2
回复 使用道具 举报
郑大仙丶 发表于 2016-9-27 22:19
同学吧..........和我作业一模一样...

这道题.

javase  双元 2期   复制一个多级文件夹,
该怎么做呢?
回复 使用道具 举报
还没学到呢,看看不说话,不过感觉好难的样子
回复 使用道具 举报
package cn.itcast.demo5;  import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class Work4 {          /*          * 将用户输入在控制台上的指定路径下所有的.txt 文件复制到 c盘下随意目录          * (你可以自 己指定路径)并在复制后将.txt 后缀名更改成.java后缀名           */         public static void copyFile(File file,File newFile) throws IOException{                 //定义一个字符缓冲区输入流                 BufferedReader br=new BufferedReader(new FileReader(file));                 //定义一个字符缓冲区输出流                 BufferedWriter bw=new BufferedWriter(new FileWriter(newFile));                 String line=null;                 while((line=br.readLine())!=null){                         bw.write(line);                         bw.newLine();                         bw.flush();                 }                 br.close();                 bw.close();                                           }         public static void main(String[] args) throws IOException {                         //封装目录                 File resFile=new File("F:\\新建文件夹 (2)\\txt");                 File desFile=new File("F:\\新建文件夹 (2)\\demo");                 //如果desFile不存在创建一个                 if(!desFile.exists()){                         desFile.mkdir();                 }                 File[] fileArray=resFile.listFiles(new FileFilter() {                         @Override                         public boolean accept(File f) {                                 if(f.isFile()){                                         if(f.getName().endsWith(".txt")){                                                 return true;                                         }                                 }                                 return false;                         }                 });                 for (File file : fileArray) {                         File newFile=new File(desFile,file.getName());                         copyFile(file,newFile);                 }                 //在目的下改名                 File[] files=desFile.listFiles();                 for (File file : files) {                         File newFile=new File(desFile,file.getName().replace(".txt", ".java"));                         file.renameTo(newFile);                 }                          } }
回复 使用道具 举报
package cn.itcast.demo5;  import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class Work4 {          /*          * 将用户输入在控制台上的指定路径下所有的.txt 文件复制到 c盘下随意目录          * (你可以自 己指定路径)并在复制后将.txt 后缀名更改成.java后缀名           */         public static void copyFile(File file,File newFile) throws IOException{                 //定义一个字符缓冲区输入流                 BufferedReader br=new BufferedReader(new FileReader(file));                 //定义一个字符缓冲区输出流                 BufferedWriter bw=new BufferedWriter(new FileWriter(newFile));                 String line=null;                 while((line=br.readLine())!=null){                         bw.write(line);                         bw.newLine();                         bw.flush();                 }                 br.close();                 bw.close();                                           }         public static void main(String[] args) throws IOException {                         //封装目录                 File resFile=new File("F:\\新建文件夹 (2)\\txt");                 File desFile=new File("F:\\新建文件夹 (2)\\demo");                 //如果desFile不存在创建一个                 if(!desFile.exists()){                         desFile.mkdir();                 }                 File[] fileArray=resFile.listFiles(new FileFilter() {                         @Override                         public boolean accept(File f) {                                 if(f.isFile()){                                         if(f.getName().endsWith(".txt")){                                                 return true;                                         }                                 }                                 return false;                         }                 });                 for (File file : fileArray) {                         File newFile=new File(desFile,file.getName());                         copyFile(file,newFile);                 }                 //在目的下改名                 File[] files=desFile.listFiles();                 for (File file : files) {                         File newFile=new File(desFile,file.getName().replace(".txt", ".java"));                         file.renameTo(newFile);                 }                          } }
回复 使用道具 举报
CreScert 来自手机 中级黑马 2016-10-1 00:23:51
19#
要用递归,比较方便点,还是推荐递归吧
回复 使用道具 举报
基础班23天的例题改一下,应该是Test3的代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马