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;
}
}
在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();
}
}
}
}
}