1. 程式人生 > >瘋狂Java學習筆記(022)

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

}