疯狂Java学习笔记(022)
做几个练习题:
1.设计程序实现将一个路径下的所有.jpg图片复制到c:/jpgs目录下. (注意同名文件的处理!!!)
package com.test; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; /* * 设计程序实现将一个路径下的所有.jpg图片复制到c:/jpgs目录下. (注意同名文件的处理!!!) */ public class CopyJpgDemo { public static void main(String[] args) throws Exception { File src = new File("c:/srcDir"); File destDir = new File("c:/demosFolder"); copy(src,destDir); } public static void copy(File dir,File destDir) throws Exception{ File[] files = dir.listFiles(); for (File file : files) { if(file.isFile() && file.getName().toLowerCase().endsWith(".jpg")){ //c:\srcDir\dog.jpg System.out.println(file.getAbsolutePath().replaceAll("[\\:]", "_")); // File newFile = new File(destDir, file.getAbsolutePath().replaceAll("[\\:]", "_")); // // FileUtils.copyFile(file, newFile); }else if(file.isDirectory()){ // copy(file,destDir); } } } }
2.自定义方法实现:查找指定路径下的所有大于2M的文本文件.显示其基本信息.
package com.test; import java.io.File; /* * 自定义方法实现:查找指定路径下的所有大于2M的文本文件.显示其基本信息. */ public class FindDemo1 { public static void main(String[] args) { File src = new File("c:/srcDir"); find(src); } public static void find(File dir){ File[] files = dir.listFiles(); if(files != null){ for (File file : files) { if(file.isFile() && file.getName().toLowerCase().endsWith(".txt") && file.length() > 1024 * 1024 * 2){ System.out.println(file.getAbsolutePath()+" : "+file.length()/1024/1024 + " MB"); }else{ //递归调用 find(file); } } } } }
3.自定义方法实现:查找指定路径下的所有文件名中包含"java"字样的文件 * (注意不是以.java为后缀的文件,而是文件名中包含java字样),并把文件列表保存在c:\java_file_list.txt中.
package com.test; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; /* * 自定义方法实现:查找指定路径下的所有文件名中包含"java"字样的文件 * (注意不是以.java为后缀的文件,而是文件名中包含java字样),并把文件列表保存在c:\java_file_list.txt中. */ public class FindDemo2 { public static void main(String[] args) throws Exception { File src = new File("c:/srcDir"); File file = new File("c:/java_file_list.txt"); find(src,file); } public static void find(File dir,File dest) throws Exception{ File[] files = dir.listFiles(); for (File file : files) { if(file.isFile()){ String name = file.getName(); //把文件名中的后缀去掉 name = name.substring(0, name.lastIndexOf(".")); if(name.contains("java")){ BufferedWriter bw = new BufferedWriter(new FileWriter(dest,true)); bw.write(file.getAbsolutePath()); bw.newLine(); bw.close(); } }else{ find(file,dest); } } } }
4.设计程序实现从一个包含5个人名(一个名字占一行)的文本文件中随机获取两个不同的人名字!
package com.test; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; /* * 设计程序实现从一个包含5个人名(一个名字占一行)的文本文件中随机获取两个不同的人名字! */ public class GetRandomNameDemo { public static void main(String[] args) throws Exception { ArrayList<String> list = new ArrayList<String>(); BufferedReader br = new BufferedReader(new FileReader("name.txt")); String name = null; while((name = br.readLine()) != null){ list.add(name); } br.close(); //随机产生两个不同的数 int r1 = (int)(Math.random() * list.size()); int r2 = (int)(Math.random() * list.size()); while(r2 == r1){ r2 = (int)(Math.random() * list.size()); } System.out.println(list.get(r1) +" - "+ list.get(r2)); } }
5.统计网站访问次数最多的前三名 * * 10.0.0.1 www.youku.com 200
package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.util.Comparator; import java.util.TreeMap; import java.util.TreeSet; /* * 统计网站访问次数最多的前三名 * * 10.0.0.1 www.youku.com 200 * */ public class LogCountDemo { public static void main(String[] args) throws Exception { //读取日志 BufferedReader br = new BufferedReader(new FileReader("c:/test_log.txt")); //创建集合,用于存放网站和次数 TreeMap<String, Integer> map = new TreeMap<String,Integer>(); //切出网址,统计次数 String line = null; while((line = br.readLine()) != null){ // String site = line.split(" ")[1]; //添加到集合:第一次出现:<site,1>,否则:<site,旧值+1> if(!map.containsKey(site)){ map.put(site, 1); }else{ map.put(site, map.get(site) + 1); } } br.close(); //创建新集合. TreeSet<String> set = new TreeSet<String>(new Comparator<String>() { //www.baidu.com_5 @Override public int compare(String o1, String o2) { int n1 = Integer.parseInt(o1.split("_")[1]); int n2 = Integer.parseInt(o2.split("_")[1]); String site1 = o1.split("_")[0]; String site2 = o2.split("_")[0]; //主要条件 int r1 = n2 - n1; // int r2 = r1 == 0?site1.compareTo(site2):r1; return r2; } }); //遍历map,将元素放到新集合中 for(String site : map.keySet()){ set.add((site) + "_" + map.get(site)); } //写出到文件 BufferedWriter bw = new BufferedWriter(new FileWriter("count.txt")); int x = 0; for (String string : set) { String[] split = string.split("_"); bw.write(split[1] + " "+ split[0]); bw.newLine(); x++; if(x >= 3){ break; } } bw.close(); } }
6.自定义类,使用LinkedList模拟栈结构. 提供如下功能: (1)压栈 (2)弹栈 (3)遍历 (4)清空
package com.test; /* * 1.自定义类,使用LinkedList模拟栈结构. 提供如下功能: (1)压栈 (2)弹栈 (3)遍历 (4)清空 */ import java.util.Iterator; import java.util.LinkedList; class MyStack<E>{ //在成员位置保持一个LinkedList对象,功能都是它实现的!! LinkedList<E> list = new LinkedList<E>(); //压栈 public void push(E e){ //在末尾添加元素 list.add(e); } //弹栈 public E pop(){ return list.removeLast(); } //迭代器 public Iterator<E> iterator(){ return list.iterator(); } //清空 public void clear(){ list.clear(); } //获取大小 public int size(){ return list.size(); } } public class MyStackDemo { public static void main(String[] args) { //测试自定义栈 MyStack<String> ms = new MyStack<String>(); // ms.push("abc"); ms.push("java"); ms.push("mysql"); /* // System.out.println(ms.size()); //循环弹栈 while(ms.size() > 0){ System.out.println(ms.pop()); } */ /* //迭代器 Iterator<String> it = ms.iterator(); while(it.hasNext()){ System.out.println(it.next()); } */ //清空 ms.clear(); System.out.println(ms.size()); } }