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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhiqi0721 中级黑马   /  2016-7-17 19:40  /  1342 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

键盘录入一个文件路径,完成以下要求
         * a.编写一个方法,统计该目录下的.java文件个数,并包含子文件
         * b.将满足条件的文件名写入到该项目根目录下的a.txt

8 个回复

倒序浏览
public static void writerFileName(File file) throws IOException{
                // 判断文件对象是否是文件夹
                if(!file.isDirectory()){
                        System.out.println("目标文件夹有误");
                        return;
                }
               
                // 获取文件夹下的所有文件对象
                File[] listFiles = file.listFiles();
               
                // 创建一个整数来记录.java文件的数量
                int count = 0;
               
                // 创建输出流
                FileWriter fos = new FileWriter("a.txt");
               
                // 创建高效输出流
                BufferedWriter bos = new BufferedWriter(fos);
               
               
                // 遍历所有文件对象
                for (File file2 : listFiles) {
                        // 判断文件对象是否是文件
                        if(file2.isFile()){
                                // 获取文件名
                                String fileName = file2.getName();
                                // 判断文件名是否包含.java
                                if(fileName.contains(".java")){
                                        // 把文件名写入文件
                                        bos.write(fileName.toCharArray());
                                        bos.newLine();
                                        // 计数加1
                                        count++;
                                }
                        }else{
                                // 文件对象为文件夹,进行递归处理
                                writerFileName(file2);
                        }
                }
                // 输出文件个数
                System.out.println("有.java文件" + count +"个");
                // 关闭流
                bos.close();
        }

回复 使用道具 举报
  1. public static void writerFileName(File file) throws IOException {
  2.                 // 判断文件对象是否是文件夹
  3.                 if (!file.isDirectory()) {
  4.                         System.out.println("目标文件夹有误");
  5.                         return;
  6.                 }
  7.                 // 获取文件夹下的所有文件对象
  8.                 File[] listFiles = file.listFiles(new FilenameFilter() {

  9.                         @Override
  10.                         public boolean accept(File dir, String name) {
  11.                                 return name.endsWith(".java");
  12.                         }
  13.                 });
  14.                 // 创建一个整数来记录.java文件的数量
  15.                 int count = 0;
  16.                 // 创建输出流
  17.                 FileWriter fos = new FileWriter("a.txt");
  18.                 // 创建高效输出流
  19.                 BufferedWriter bos = new BufferedWriter(fos);
  20.                 // 遍历所有文件对象
  21.                 for (File file2 : listFiles) {
  22.                         // 获取文件名
  23.                         String fileName = file2.getName();
  24.                         // 把文件名写入文件
  25.                         bos.write(fileName.toCharArray());
  26.                         bos.newLine();
  27.                         // 计数加1
  28.                         count++;
  29.                 }
  30.                 // 输出文件个数
  31.                 System.out.println("有.java文件" + count + "个");
  32.                 // 关闭流
  33.                 bos.close();
  34.         }
复制代码
回复 使用道具 举报
好想给你写一遍,但看前两个写的已经很好了
回复 使用道具 举报
可以的 ~~~~
回复 使用道具 举报
public class Test {         public static void main(String[] args) throws Exception {                 File dir = getFileDir();                 getFile(dir);         }         //编写一个方法,统计该目录下的.java文件个数,并包含子文件         public static void getFile(File dir) throws Exception {                 File[] arr = dir.listFiles();                 for (File file : arr) {                         if(file.isFile() && file.getName().endsWith(".java")) {                                 //将满足条件的文件名写入到该项目根目录下的a.txt                                 BufferedWriter writer = new BufferedWriter(new FileWriter("a.txt",true));                                 writer.write(file.getName());                                 writer.newLine();                                 writer.close();                         } else {                                 getFile(file);                         }                 }         }                  //键盘录入一个文件路径         public static File getFileDir() {                 Scanner sc = new Scanner(System.in);                 System.out.println("请输入一个文件路径");                 while(true) {                         File dir = new File(sc.nextLine());                         if(!dir.exists()) {                                 System.out.println("输入的文件不存在,请重新输入");                         } else if(dir.isFile()) {                                 System.out.println("输入文件错误,请输入文件夹路径");                         } else {                                 return dir;                         }                 }         }
回复 使用道具 举报
package 杂七杂八;

import java.io.File;

/*
* 递归查询指定目录下面以".java"结尾的文件的绝对路径
*/
public class FileDemo {
    public static void main(String[] args) {
        File file = new File("E:\\有些是java文件");
        getAllAbsolutePath(file);
    }

    private static void getAllAbsolutePath(File file) {
        File[] fileArr = file.listFiles();

        for (File f : fileArr) {
            if (f.isDirectory()) {
                getAllAbsolutePath(f);
            } else if (f.getName().endsWith(".java")) {
                System.out.println(f.getAbsolutePath());
            }
        }
    }
}
结果是输出在控制台的 没有用io流 因为有些遗忘了  要去补补、、、、、
回复 使用道具 举报
还没有学到呀
回复 使用道具 举报
这个写的还算详细吧!求助攻啊急需技术分 5555555555 奋斗!
package com.bi.Lc;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/*
* 思路:
* 1.必须进行深度遍历,因为有很多子目录,子目录中也可能有自己的子目录
* 2.要在遍历的过程中进行过滤,将符合的内容存储到容器中
* 3.对容器中的内容进行遍历并将绝对路径写入到文件中
*
*
*/
public class FileList {
public static void main(String[] args) {
  File dir = new File("E:\\JavaStu");//这个一定要有哦
  FilenameFilter filter = new FilenameFilter(){
   @Override
   public boolean accept(File dir, String name) {
    // TODO Auto-generated method stub
    return name.endsWith(".avi");//此处是文件的后缀名,因为是别人的电脑,不太想慢慢找java文件
    //就写成了.avi,
   }
   
  };
  
  List<File> list = new ArrayList<File>();
  
  getFiles(dir,filter,list);
  
  File destFile = new File(dir,"a.txt");
  
  writer2File(list, destFile);
}

/**
  * 对指定目录中的内容进行深度遍历,并按照指定过滤器,进行过滤
  * 将过滤后的内容存储到指定容器List中
  *
  * @param dir
  * @param filter
  * @param list
  */
public static void getFiles(File dir,FilenameFilter filter,List<File> list) {
  File[] files = dir.listFiles();
  
  for(File file:files){
   if(file.isDirectory()){
    //进行递归
    getFiles(file,filter,list);
   }else{
    //将符合的文件存储到list集合中
    if(filter.accept(dir, file.getName())){
     list.add(file);
    }
   }
  }
  
}
/**
  * 将list集合写入到目的文件中
  * @param list
  * @param destFile
  */
public static void writer2File(List<File> list,File destFile){
  BufferedWriter bw = null;
  try{
   bw = new BufferedWriter(new FileWriter(destFile));
   for(File file:list){
    bw.write(file.getAbsolutePath());
    bw.newLine();
    bw.flush();
   }
  }catch(IOException e){
   throw new RuntimeException("写入失败");
  }finally{
   if(bw!=null){
    try {
     bw.close();
    } catch (IOException e) {
     throw new RuntimeException("关闭失败");
    }
   }
  }
}
}

运行结果:



回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马