黑马程序员技术交流社区

标题: 一个基础测试题,不知道怎么做 [打印本页]

作者: HM王琦    时间: 2013-4-7 22:31
标题: 一个基础测试题,不知道怎么做
本帖最后由 HM王琦 于 2013-4-8 20:06 编辑

9,在D盘下的java文件夹中把扩展名为.java的文件复制到名为jad的文件夹中,文并把扩展名为.java的文件改为.jad文件。

我的思路是先将java文件夹中.java文件过滤出来,然后创建一个jad文件夹,把滤出来的文件复制到jad文件夹中,再把.java文件该为.jad文件。
有两个问题 1,怎么能把.java文件过滤出来;2,过滤出来后怎么改名字。
作者: ㄨ____陌生    时间: 2013-4-7 22:52
package cn.javase.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Jad2Java {
public static void main(String[] args) throws Exception {
File srcDir = new File("java");
if(!(srcDir.exists() && srcDir.isDirectory()))
throw new Exception("目录不存在");
File[] files = srcDir.listFiles(
new FilenameFilter(){
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}

}
);

System.out.println(files.length);
File destDir = new File("jad");
if(!destDir.exists()) destDir.mkdir();
for(File f :files){
FileInputStream fis = new FileInputStream(f);
String destFileName = f.getName().replaceAll("\\.java$", ".jad");
FileOutputStream fos = new FileOutputStream(new File(destDir,destFileName));
copy(fis,fos);
fis.close();
fos.close();
}
}

private static void copy(InputStream ips,OutputStream ops) throws Exception{
int len = 0;
byte[] buf = new byte[1024];
while((len = ips.read(buf)) != -1){
ops.write(buf,0,len);
}
}
}
作者: 王川    时间: 2013-4-7 23:07
  1.         file.getName().indexOf(".java")//过滤java文件
  2.         file.renameTo("yourPath/" + file.getName().substring(0, file.getName().lastIndexOf(".")) + ".jad");//改名为.jad文件
复制代码
你试试这样看行否
作者: 黄玉昆    时间: 2013-4-7 23:12
建议你把这个问题也可以写到这里:http://bbs.itheima.com/thread-43374-1-1.html

作者: 赵晓东    时间: 2013-4-7 23:37
  1. /*在D盘下的java文件夹中把扩展名为.java的文件复制
  2. 到名为jad的文件夹中,文并把扩展名为.java的文件改为.jad文件。

  3. 思路:
  4. 1.先判断文件是否为.java文件
  5. 2.如果是就复制到jad文件夹中
  6. 3.将复制过来的文件后缀名改为.jad

  7. 步骤:
  8. 1.使用listFiles列出java目录下所有文件
  9. 2.使用使用循环判断目录中的文件后缀名是否为.java(endsWith判断)
  10. 4.如果中了,把后缀名该为.jad文件(replace),在jad文件夹下建立同名文件,
  11. 3.复制文件
  12. */

  13. import java.io.*;

  14. class RemoveFile
  15. {
  16.         public static void main(String[] args) throws IOException
  17.         {
  18.                 File f = new File("E:\\javase"); //改成D盘下的java文件夹即可
  19.                 BufferedReader br;
  20.                 BufferedWriter bw;
  21.                 File[] files = f.listFiles(); //获取Java文件夹下所有文件
  22.                 for (File file : files)
  23.                 {
  24.                         if (file.getName().endsWith(".java")) //过滤“.java”文件
  25.                         {
  26.                                 String child = file.getName().replace(".java",".jad"); //将后缀名改为".jad"
  27.                                 f = new File("D:\\jad",child); //目标目录
  28.                                 br = new BufferedReader(new FileReader(file));
  29.                                 bw = new BufferedWriter(new FileWriter(f));
  30.                                 String line = null;
  31.                                 while ((line = br.readLine()) != null)
  32.                                 {
  33.                                         bw.write(line); //复制文件
  34.                                         bw.newLine();
  35.                                         bw.flush();
  36.                                 }

  37.                                 br.close();
  38.                                 bw.close();
  39.                         }
  40.                 }
  41.         }
  42. }
复制代码

作者: 潘廖明    时间: 2013-4-8 00:24
(1)过滤关键代码:
  1. /**
  2. * 取得在D:\java下后缀为".java"的所有文件
  3. * @param srcDir
  4. */
  5. private static void getFileName(File srcDir)
  6. {
  7. //测试此抽象路径名表示的文件或目录是否存在。
  8. //测试此抽象路径名表示的文件是否是一个目录;
  9. if (srcDir.exists() && srcDir.isDirectory())
  10. { files = srcDir.listFiles(new FilenameFilter()
  11. {//实现过滤文件名的接口

  12. @Override
  13. public boolean accept(File dir, String name){
  14. return name.endsWith(".java");//返回java为后缀的所有文件数组
  15. }});
  16. System.out.println("所以文件的个数为:"+files.length);
  17. } else
  18. {//该目录不存在时新建一个目录
  19. System.out.println("该java文件目录不存在!");
  20. srcDir.mkdir();
  21. System.out.println("新建目录成功!");
  22. }}
复制代码
(2)改名关键代码:
//将目标文件的后缀名改为--“.jad”
  1. String targetSuffix = file.getName().replaceAll("\\.java", ".jad");
复制代码

作者: 黄玉昆    时间: 2013-4-8 09:03
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者: 我手心里的宝    时间: 2013-4-8 09:07
我去,怎么了这是,考试题也贴出来了呀
作者: 梁航斌    时间: 2013-4-8 10:43
我是用split方法将获取的文件名截取,然后存的时候改的,上代码
  1. /*编写一个程序,将d:\java 目录下的所有.java 文件复制到d:\jad 目录下,
  2. 并将原来文件的扩展名从.java 改为.jad。*/
  3. import java.io.*;
  4. import java.util.*;
  5. class copyDemo
  6. {
  7.         private static ArrayList<File> al = new ArrayList<File>();
  8.         public static void main(String []args) throws Exception{
  9.                 Dir();
  10.         }
  11.         public static void Dir() throws Exception{
  12.                 File f = new File("D://iava");
  13.                 File []files = f.listFiles(new FileFilter(){
  14.                         public boolean accept(File pathname){       
  15.                                 return pathname.toString().contains(".java");
  16.                         }
  17.                 });
  18.                 for(File file : files){
  19.                         al.add(file);
  20.                 }
  21.                 for(File file:al){
  22.                         System.out.println(file.toString());
  23.                         copy(file);
  24.                 }
  25.         }
  26.         public static void copy(File file) throws Exception{
  27.                 //这里是将java改jad
  28.                 String str[] = file.getName().toString().split("\\.");
  29.                 File f = new File("D://jad//"+str[0]+".jad");
  30.                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));
  31.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
  32.                 byte []b = new byte[1024];
  33.                 int num = 0;
  34.                 while((num=bis.read(b))!=-1){
  35.                         bos.write(b,0,num);
  36.                 }
  37.                 bos.close();
  38.                 bis.close();
  39.         }
  40. }
复制代码

作者: HM王琦    时间: 2013-4-8 20:03
不知道咋的,这些回复我现在才看到,谢谢你们的积极回答,我今天也搞了半天,搞出来了。把代码贴出来大家看一下
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.FilenameFilter;
  8. import java.io.IOException;

  9. public class Test9 {

  10.         /*
  11.          * 将D盘下java文件夹中的.java文件复制到D盘下的jad文件夹中,并将.java文件改为.jad文件
  12.          *  
  13.          */
  14.         public static void main(String[] args) throws IOException {
  15.                
  16.                 File f=new File("F:\\java");
  17.                 //指定路径创建文件夹
  18.                 File f2=new File("F:\\jad\\");
  19.                 f2.mkdir();
  20.                 //过滤文件夹里的文件,只要.java文件
  21.                 File[] files=f.listFiles(new FilenameFilter(){
  22.                         public boolean accept(File dir,String name){
  23.                                
  24.                                 return name.endsWith(".java");
  25.                                
  26.                         }
  27.                        
  28.                 });
  29.                 //过滤后的文件复制到指定文件夹
  30.                 for(File file:files){
  31.                         copyFile(file,f2);
  32.                 }
  33.         }
  34.         //创建复制文件方法 ,指定源文件和复制文件路径。
  35.         public static void copyFile(File f,File f2) throws IOException{
  36.                
  37.                 BufferedWriter bufw=new BufferedWriter(new FileWriter(f2+"\\"+f.getName().replace(".java", ".jad")));
  38.                 BufferedReader bufr=new BufferedReader(new FileReader(f));
  39.                 String line=null;
  40.                 while((line=bufr.readLine())!=null){
  41.                         bufw.append(line);
  42.                         bufw.newLine();
  43.                         bufw.flush();
  44.                 }
  45.                 bufr.close();
  46.                 bufw.close();
  47.                
  48.                
  49.         }

  50. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2