1、键盘录入一个文件夹路径,删除该文件夹(包含文件夹内容)
package com.cc.homework;
import java.io.File;
import java.util.Scanner;
//1、键盘录入一个文件夹路径,删除该文件夹(包含文件夹内容)
public class Homework01 {
public static void main(String[] args) {
File file = getDir();
deleteDir(file);
}
private static void deleteDir(File file) {
// 遍历文件夹
File[] lf = file.listFiles();
for (File f : lf) {
if (f.isFile()) {//如果是文件
f.delete();//直接删除
} else {//如果不是文件,还是文件夹
deleteDir(f);//继续递归删除文件的方法,从最里层往外删除
}
}
file.delete();//最后的空文件夹也要删除掉
}
// 判断输入的是否是文件夹
public static File getDir() {
// 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 因为不知道什么时候能够录入正确的文件夹,所以设置一个死循环
while (true) {
System.out.println("请录入一个文件夹路径:");
// 录入一个字符串表示文件夹路径
String line = sc.nextLine();
// 创建指向该文件夹路径的对象
File file = new File(line);
// 如果是文件夹/目录
if (file.isDirectory()) {
// 范文该文件夹
return file;
} else {// 如果不是文件夹
System.out.println("您输入的不是一个合法的文件夹,请重新输入哦..");//重新输入
}
}
}
}
2、键盘录入一个文件夹路径,统计该文件夹下的各种后缀名的文件的个数
例如:.txt有10个,.java有30个......
package com.cc.homework;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
/*2、键盘录入一个文件夹路径,统计该文件夹下的各种后缀名的文件的个数
例如:.txt有10个,.java有30个......*/
public class Homework02 {
// 如果只用一个map集合,需要把map集合定义在方法外,也就是定义成全局的,并且是静态的,让两个方法同时共享这一个map集合,
static Map<String, Integer> map = new HashMap<String, Integer>();// 创建一个容器,后缀----个数
public static void main(String[] args) {
File file = getDir();// 输入正确的文件夹
getCount(file);// 调用getCount方法
StringBuilder sb = new StringBuilder();// 创建一个StringBuilder类型的容器
Set<Entry<String, Integer>> es = map.entrySet();// 遍历map集合
for (Entry<String, Integer> e : es) {
// 进行字符串拼接
sb.append(".").append(e.getKey()).append("有").append(e.getValue()).append("个 ").append(" ");
}
System.out.println(sb);
}
private static void getCount(File file) {
File[] lf = file.listFiles();
for (File f : lf) {// 遍历文件夹
if (f.isFile()) {// 如果是文件
String[] strs = f.getName().split("\\.");// "."匹配所有字符要加\\转义,将文件以点分隔成字符串数组,最后一个就是后缀名只不过没有点
int last = strs.length - 1;// 最后一个字符串(后缀)的索引
if (map.containsKey(strs[last])) {// 如果map集合中包含该后缀,也就是这个集合中已经有了这个后缀,只需要改变次数即可
int count1 = map.get(strs[last]);// 取得之前的该后缀对应的值(次数)
map.put(strs[last], count1 + 1);// 将次数加1之后,在加到map集合中
} else {// 如果map集合中不包含该后缀,也就是这个后缀是第一次出现
map.put(strs[last], 1);// 直接把该后缀以及次数1加到集合中
}
// 下面这句使用三元运算符,等同于上面的if else 循环
// map.put(strs[last], map.containsKey(strs[last])?map.get(strs[1])+1:1);
} else {// 如果不是文件夹
getCount(f);// 递归调用该方法,直至是文件
}
}
}
// 自定义方法:判断输入的是否是文件夹
public static File getDir() {
// 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 因为不知道什么时候能够录入正确的文件夹,所以设置一个死循环
while (true) {
System.out.println("请录入一个文件夹路径:");
// 录入一个字符串表示文件夹路径
String line = sc.nextLine();
// 创建指向该文件夹路径的对象
File file = new File(line);
// 如果是文件夹/目录
if (file.isDirectory()) {
// 范文该文件夹
return file;
} else {// 如果不是文件夹
System.out.println("您输入的不是一个合法的文件夹,请重新输入哦..");// 重新输入
}
}
}
}
//方法二
package com.cc.homework;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Scanner;
public class Homework2_02 {
public static void main(String[] args) {
// 获取文件夹路径
File dir = getDir();
List list = new ArrayList();// 创建一个存文件后缀的list集合
List<String> overlist = getFileExtension(dir, list);// 拿到返回的list(存有所有的文件后缀)
/*
* for(String str : overlist) { System.out.println(str); }
*/
bl(overlist);// 遍历overlist,获取各个文件后缀的个数
}
/*
* 遍历overlist就相当于遍历文件(个数)
*/
private static void bl(List<String> list) {
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();// 准备用于统计与存储的容器,双列集合、用于统计对应关系
for (int i = 0; i < list.size(); i++) {
if (map.containsKey(list.get(i))) {
int count = map.get(list.get(i)); // 遍历map集合,拼接字符串成要求格式
count += 1;
map.put((String) list.get(i), count);
} else {// 如果集合中没有当前字符,说明以前没有统计过,说明是第一次
map.put((String) list.get(i), 1);
}
}
System.out.println(map);
// blMap(map); //遍历map集合,拼接字符串成要求格式
}
/*
* 把后缀名存取list集合
*/
private static List getFileExtension(File dir, List list) {
File[] f = dir.listFiles();
for (File file : f) {
if (file.isFile()) {// 如果是文件就统计各种后缀名的文件的个数(使用LinkedHashMap)
String str = file.getName().substring(file.getName().lastIndexOf("."));
list.add(str);
} else {// 如果是文件夹就继续调用printFile()函数
getFileExtension(file, list);
}
}
return list;
}
/*
* 确保输入的是文件夹
*/
private static File getDir() { // 从键盘录入一个文件夹路径,并判断是否是文件夹
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请录入一个文件夹路径:");
String str = sc.nextLine();
File f = new File(str);
if (f.isDirectory()) {
return f;
} else {
System.out.println("请重新录入...");
}
}
}
}
3、键盘录入一个文件夹路径,作为源文件夹;键盘录入一个文件夹路径,作为目标文件夹
写代码将源文件夹拷贝到目标文件夹中
a
b
b/a
package com.cc.homework;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Scanner;
/*3、键盘录入一个文件夹路径,作为源文件夹;键盘录入一个文件夹路径,作为目标文件夹
写代码将源文件夹拷贝到目标文件夹中
a
b
b/a*/
public class Homework_03 {
public static void main(String[] args) throws Exception {
// 获取源文件夹
File srcDir = getDir();
// 获取要把目标文件夹复制到那个文件夹下面
File dir = getDir();
// 创建目标文件
File destDir = new File(dir, srcDir.getName());
// 一定要记得先创建目标文件!!!
destDir.mkdir();
copyDir(srcDir, destDir);
System.out.println("复制成功!");
}
// 定义方法:创建各个目录
private static void copyDir(File srcDir, File destDir) throws Exception {
// 遍历srcDir
File[] lf = srcDir.listFiles();
for (File f : lf) {
// 设置源文件
File srcFile = f;
// 创建目标文件
File destFile = new File(destDir, f.getName());
if (f.isFile()) {// 如果是文件,就调用复制文件的方法
copyFile(srcFile, destFile);
} else {// 如果不是文件
// 记得首先创建出来目录!!!
destFile.mkdir();
// 然后递归调用创建目录,直至是文件
copyDir(srcFile, destFile);
}
}
}
// 定义方法复制文件
private static void copyFile(File srcFile, File destFile) throws Exception {
// 高效输入流//记得抛出异常
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
// 高效输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
// 定义一个字节数组
byte[] buf = new byte[1024];
int len = 0;
while ((len = bis.read(buf)) != -1) {
bos.write(buf, 0, len);
}
bis.close();
bos.close();
}
// 定义方法判断输入的是否是一个文件夹
private static File getDir() {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请录入一个文件夹:");
String line = sc.nextLine();
File file = new File(line);
if (file.isDirectory()) {
return file;
} else {
System.out.println("您录入的不是一个合法的文件夹,请重新录入...");
}
}
}
}
4 在D盘下的a/b/c/d中创建一个文件,名称叫HelloWorld.txt
import java.io.File;
import java.io.IOException;
/*在D盘下的a/b/c/d中创建一个文件,名称叫HelloWorld.txt*/
public class Test04 {
public static void main(String[] args) throws IOException {
File f = new File("F:/a/b/c");
f.mkdirs();
File file = new File(f,"HelloWorld.txt");
file.createNewFile();
}
}
5 键盘录入一个字符串,表示一个文件夹路径,如果不是文件夹路径则提示重新录入
打印当前文件夹下,所有的大于20M的后缀名是.wmv的文件的绝对路径
6 用代码实现以下需求
(1)有如下字符串"If you want to change your fate I think you must come to the ujiuye to learn java"(用空格间隔)
(2)打印格式:
to=3
think=1
you=2
//........
(3)按照上面的打印格式将内容写入到D:\\count.txt文件中(要求用高效流)
package com.cc.homework;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;
/*6 用代码实现以下需求
(1)有如下字符串"If you want to change your fate I think you must come to the ujiuye to learn java"(用空格间隔)
(2)打印格式:
to=3
think=1
you=2
//........
(3)按照上面的打印格式将内容写入到D:\\count.txt文件中(要求用高效流)*/
public class Homework06 {
public static void main(String[] args)throws Exception {
//使用LinkedHashMap可以保证输入的顺序和输出的顺序一致
LinkedHashMap<String,Integer> map = new LinkedHashMap<String,Integer>();
String str = "If you want to change your fate I think you must come to the ujiuye to learn java";
//将字符串以空格分割成字符串数组
String[] strs = str.split(" ");
//遍历数组,将字符串数组元素以及出现的次数存到map集合中
for(String s : strs) {
map.put(s, map.containsKey(s)?map.get(s)+1:1);
}
StringBuilder sb = new StringBuilder();
//高效输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\count.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\count.txt"));
//遍历map集合,将集合中的元素写入到文件中
//Set和Entry需要导包,Set是util包,Entry是util.Map下的包
Set<Entry<String,Integer>> es = map.entrySet();
for(Entry<String,Integer> e:es) {
bw.write(e.getKey()+"="+e.getValue());
//换行
bw.newLine();
//刷新
bw.flush();
}
bw.close();
}
}
7、 产生10个1-100的随机数,并放到一个数组中
(1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
(2)把数组中的数字放到当前文件夹的number.txt文件中
package com.cc.homework;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Random;
/*7、 产生10个1-100的随机数,并放到一个数组中
(1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
(2)把数组中的数字放到当前文件夹的number.txt文件中*/
public class Homework07 {
public static void main(String[] args)throws Exception {
ArrayList<Integer> list = new ArrayList<Integer>();
int[] arr = new int[10];
//高效输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("number1.txt"));
Random r = new Random();
for(int i =0;i<arr.length;i++) {
//生成随机数
int x = r.nextInt(100)+1;
arr[i] = x;//放到数组中
}
//遍历数组,把大于等于10的加到集合中
for(int i=0;i<arr.length;i++) {
if(arr[i]>=10) {
list.add(arr[i]);
}
}
//遍历集合
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
//将集合中的元素写到文件中
bw.write(Integer.toString(list.get(i)));//注意如果写的是整数,他会根据ASCII码找对应的字符就会出现乱码
bw.newLine();//换行
bw.flush();//字符流需要手动刷新
}
bw.close();//关闭流
}
}