2021-08-09 Java练习题

1、已知一个目录,判断下面是否包含.jpg文件,如果有请输出文件名称。

package zpb.practice;

import java.io.File;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/9 20:16
 *
 * 1、已知一个目录,判断下面是否包含.jpg文件,如果有请输出文件名称。
 */
public class judgmentFile {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\PerCheung\\Downloads\\");
        File[] fileArray = file.listFiles();
        assert fileArray != null;
        for (File f : fileArray) {
            if(f.isFile()){
                if(f.getName().endsWith(".jpg")){
                    System.out.println(f.getName());
                }
            }
        }
    }
}

2、遍历指定目录下的所有文件,包括子目录中的文件。(使用递归方法)

package zpb.practice;

import java.io.File;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/9 20:25
 *
 * 2、遍历指定目录下的所有文件,包括子目录中的文件。(使用递归方法)
 *
 */
public class Traverse {
    public static void main(String[] args) {
        getDirectory(new File("J:\\Project\\Practice809\\src"));
    }
    // 递归遍历
    static int getDirectory(File file) {
        File flist[] = file.listFiles();
        if (flist == null || flist.length == 0) {
            return 0;
        }
        for (File f : flist) {
            if (f.isDirectory()) {
                //这里将列出所有的文件夹
                System.out.println("Dir==>" + f.getAbsolutePath());
                getDirectory(f);
            } else {
                //这里将列出所有的文件
                System.out.println("file==>" + f.getAbsolutePath());
            }
        }
        return 0;
    }
}

学习自Leon_Jinhai_Sun的博客文章

在java中遍历一个文件夹里边的所有文件,可以有两种方式:
 
一、递归遍历,通常也是开发者第一时间能想到的方法,递归遍历
优点是:实现起来相对简单,代码量相对较少,执行效率较高。
缺点是:比较吃内存,对硬件要求较高。
具体算法如下:
// 递归遍历
private void getDirectory(File file) {
  File flist[] = file.listFiles();
  if (flist == null || flist.length == 0) {
      return 0;
  }
  for (File f : flist) {
      if (f.isDirectory()) {
          //这里将列出所有的文件夹
          System.out.println("Dir==>" + f.getAbsolutePath()); 
          getDirectory(f);
      } else {
         //这里将列出所有的文件
          System.out.println("file==>" + f.getAbsolutePath());
      }
  }
}

二、非递归遍历,递归遍历的话是很容易理解的,但是非递归遍历的话估计思路不太容易上来,
我当时也苦思良久,发现java有个一个LinkedList这玩意,字面上也大概知道,
这个是用来保存一个链接文件的列表,有这个的话就好办了,具体思路是这样:
遍历一个文件夹的时候,如果是文件夹,就添加到linkedlist里去,如果是文件则列出;
这样该目录的文件和文件夹就遍历完毕了,文件夹全部被保存到linkedlist里;
所以剩下的就是遍历linkedlist里边的文件夹的文件,遍历方式同上边的操作一致,
如果是文件夹就添加到linkedlist里边(Ps:遍历过程中的linkedlist始终是同一个list),
当然每次从列表取出一个文件夹之后需要从列表中删除该文件夹,
这里采用linkedlist.removeFirst()来读取,
这样是每次读取列表的第一个元素并将其从列表剔除。
这样只要遍历到linkedlist的状态是isEmty的时候就说明遍历完毕了。算法如下:
    /**
	 * 非递归遍历
	 * @param file
	 * @return
	 */
	public static LinkedList<File> GetDirectory(String path) {
		File file = new File(path);
		LinkedList<File> Dirlist = new LinkedList<File>(); // 保存待遍历文件夹的列表
		LinkedList<File> fileList = new LinkedList<File>();
		GetOneDir(file, Dirlist, fileList);// 调用遍历文件夹根目录文件的方法
		File tmp;
		while (!Dirlist.isEmpty()) {
			tmp = (File) Dirlist.removeFirst();// 从文件夹列表中删除第一个文件夹,并返回该文件夹赋给tmp变量
			// 遍历这个文件夹下的所有文件,并把
			GetOneDir(tmp, Dirlist, fileList);
 
		}
		return fileList;
	}
 
	// 遍历指定文件夹根目录下的文件
	private static void GetOneDir(File file, LinkedList<File> Dirlist,
			LinkedList<File> fileList) {
		// 每个文件夹遍历都会调用该方法
		File[] files = file.listFiles();
 
		if (files == null || files.length == 0) {
			return;
		}
		for (File f : files) {
			if (f.isDirectory()) {
				Dirlist.add(f);
			} else {
				// 这里列出当前文件夹根目录下的所有文件,并添加到fileList列表中
				fileList.add(f);
				// System.out.println("file==>" + f);
 
			}
		}
	}

3、判断某目录下是否有HelloWorld.txt文件。

判断某目录下是否有HelloWorld.txt文件。
如果有,请删除它。
如果没有,请创建它,并且输入内容:我爱肖老师!

package zpb.practice;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/9 20:53
 * <p>
 * 3、判断某目录下是否有HelloWorld.txt文件。
 * 如果有,请删除它。
 * 如果没有,请创建它,并且输入内容:我爱肖老师!
 */
public class createFile {
    public static void main(String[] args) throws IOException {
        File f = new File("J:\\Project\\Practice809\\src\\HelloWorld.txt");
        if (f.exists()) {
//            删除磁盘中的这个文件
            f.delete();
        }
        if (!f.exists()) {
//            在磁盘中创建这个文件
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        FileOutputStream wf=new FileOutputStream("J:\\Project\\Practice809\\src\\HelloWorld.txt",false);
        String  s="我爱肖老师!";
        byte[] bytes = s.getBytes();
        wf.write(bytes);
    }
}


4、c盘下有一个图片,请将它复制到d盘下。

package zpb.practice;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/9 21:15
 * <p>
 * 4、c盘下有一个图片,请将它复制到d盘下。
 */
public class ctrlCV {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("C:\\Users\\PerCheung\\Downloads\\java (5).png");
        FileOutputStream out = new FileOutputStream("D:\\OneDrive\\桌面\\java.png");
        byte[] bit = new byte[in.available()];
        in.read(bit);
        out.write(bit);
        out.close();
        in.close();
    }
}


5、统计一个英文字母文件中,各字母出现的次数。

package zpb.practice;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/9 21:32
 *
 * 5、统计一个英文字母文件中,各字母出现的次数。
 */
public class statisticsABC {
    public static void main(String[] args) {
        BufferedReader reader = null;
        HashMap<Character, Integer> map = new HashMap<>();
        try {
            reader = new BufferedReader(new FileReader("J:\\Project\\Practice809\\.idea\\workspace.xml"));
            int a;
            while ((a = reader.read()) != -1) {
                if ((a >= 65 && a <= 90) || (a >= 97 && a <= 122)) {
                    char c = (char) a;
                    if (map.containsKey(c)) {
                        int num = map.get(c);
                        num++;
                        map.put(c, num);
                    } else {
                        map.put(c, 1);
                    }
                }
            }
            for (Map.Entry<Character, Integer> next : map.entrySet()) {
                System.out.println("字母:" + next.getKey() + "   次数:" + next.getValue());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PerCheung

觉得有帮助的话就打赏支持一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值