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

}

 

posted @ 2018-12-01 18:45  杜菲  阅读(143)  评论(0编辑  收藏  举报