Java知識點複習系列(1)

前言

所謂知識點複習 , 其實給的都是實際例子 . Java的每一個知識點我都給了大量實用的例子 , 做一遍對鞏固自己基礎和提升一些經驗是非常有幫助的.

複習知識點

以下的案例有些截圖了 , 不過大部分沒有截圖 , 但大家在代碼部分可以看相應的代碼 , 給了非常詳細的註釋.

數組操作

  1. 求兩個數組的差集
  2. 求兩個數組的交集
  3. 求兩個數組的並集

文件操作

  1. 實現將一個文件裏的內容複製到另一個文件中 (字符流操作)
  2. 實現創建一個臨時文件
  3. 文件路徑比較方法

目錄操作

目錄操作大部分都是遞歸用法 , 所以可以提升自己的遞歸運用的能力.

  1. 遞歸創建目錄
  2. 指定去刪除某個目錄
  3. 遞歸刪除層級目錄 請將原來創建的目錄給刪除了.
  4. 利用遞歸打印目錄結構
  5. 在指定目錄中查找文件(模糊查詢…)
  6. 判斷目錄裏面是否爲空
  7. 獲取並打印出系統根目錄
  8. 獲取當前目錄 這裏獲取方法有點另類 , 但還是非常實用的.

代碼筆記

數組操作部分

public class ArrayMain {

    public static void main(String[] args) {
    /**
     * 問題1:求數組的差集 知識點: 1.數組的運用 2.集合框架的運用
     */
    Integer[] arr = new Integer[] { 1, 5, 9, 10, 20 };
    Integer[] arr1 = new Integer[] { 1, 7, 9, 10, 20 };

    List<Integer> listA = new ArrayList<>();
    List<Integer> listB = new ArrayList<>();

    for (int i = 0; i < arr.length; i++) {
        listA.add(arr[i]);
        listB.add(arr1[i]);
    }

    // boolean flag = listA.removeAll(listB );
    // if(flag ) {
    // System.out.println(listA.size() );
    // }
    /**
     * 問題2:求兩個數組的交集
     */
    // boolean flag = listA.retainAll(listB );
    // if(flag ) {
    // System.out.println(listA.size() );
    // }

    /**
     * 問題3:求兩個數組的並集 
     * 知識點: 
     * 1. set知識點的複習(用到它的唯一性和無序性)
     */
    Set<Integer> set = new HashSet<>();
    set.addAll(listA);
    set.addAll(listB);
    System.out.println(set.size());

    }

文件操作部分

package FileOper;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
 * Java知識點複習系列(1)
 * Java文件操作實例
 * @author Administrator
 *
 */
public class FileMain {


    /**
     * 實現將一個文件裏的內容複製到另一個文件中 , 字符流操作
     */
    public static boolean copyToFile(File src, File dest) {
    if (src == null || dest == null) {
        return false;
    }

    // 聲明輸出字符流和讀入字符流
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(src)));
        PrintWriter writer = new PrintWriter(new FileOutputStream(dest), true);

        // 開始將src的數據複製到writer中
        String line = reader.readLine();
        while (line != null) {

        writer.write(line + "\n");
        writer.flush();

        line = reader.readLine();
        }

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

    System.out.println("寫入" + dest.getAbsolutePath() + "成功!");
    return true;

    }

    /**
     * 實現創建一個臨時文件 
     */
    public static void createTempFile() {

    File tempFile = new File("");
    try {
        tempFile = tempFile.createTempFile("Ghoset", ".temp");
        //也可以指定目錄創建臨時文件
        System.out.println("創建臨時文件的路徑爲:" + tempFile.getAbsolutePath());

    } catch (IOException e) {
        e.printStackTrace();
    }

    }

    /**
     * 文件路徑比較
     */
    public static void fileComple(File a, File b) {
    int ret = a.compareTo(b );
    if(ret != 0 ) {
        System.out.println("不是同一個文件!" );
    }else {
        System.out.println("是同一個文件!" );
    }
    }

    public static void main(String[] args) {
    //題目1:
     File src = new File("F:\\JAVA測試\\111\\1.txt" );
     File dest = new File("F:\\JAVA測試\\111\\test.txt" );
    // boolean flag = copyToFile(src, dest );

     //題目2:
    //createTempFile();

     //題目3:
    fileComple(src , dest );

    }

}

目錄操作部分

package DirectoryOper;

import java.io.File;

/**
 * Java知識點複習(1)
 * Java目錄操作實例
 * @author Administrator
 *
 */
public class DirectoryMain {

    /**
     * 遞歸創建目錄
     */
    public static boolean createDir(String filePath ) {
    File dire = new File(filePath );
    if(!dire.isDirectory() ) {  //一定要是存在這個目錄纔會顯示ture
        if(!dire.exists() ) {
        boolean flag = dire.mkdirs();   
        return flag;
        }
    }

        return false;
    }

    /**
     * 指定去刪除某個目錄
     */
    public static boolean deleteDir(String filePath ) {
    File file = new File(filePath );
    if(!file.isDirectory() ) {  //如果沒有存在這個目錄
        return false;
    }
    file.delete();
    return true;

    }

    /**
     * 遞歸刪除目錄  , 請將原來創建的目錄給刪除了.
     */
    public static boolean removeAllDir(File filePath ) {

        try {
            if(filePath.isDirectory() ) {
                File parent = filePath.getParentFile() ;
                filePath.delete();
                System.out.println(filePath.getAbsolutePath() + "刪除成功!" );
                removeAllDir(parent );
            }
    }catch(Exception e ) {
        return true;
    }
        return true;
    }


    /**
     * 利用遞歸打印目錄結構
     * 
     */
    public static void showDir(int indent , File file ) {

    //1.主要代碼部分
    for(int i = 0 ; i < indent ; i++ ) {
        System.out.print("-" );
    }
    System.out.println(file.getName() );

    //2.遞歸部分

    if(file.isDirectory() ) {
        File[] lists = file.listFiles();
        for(int i = 0 ; i < lists.length ; i++ ) {
        showDir(indent + 4 , lists[i] );
        }

    }
    }


    /**
     * 在指定目錄中查找文件(模糊查詢...)
     * 在F盤搜索所有以2017開頭的文件或目錄
     */
    public static void findFile(String fileName , File file ) {
    //1.獲取這個目錄下的所有文件
    File[] lists = file.listFiles();

    //2.直接進行遍歷操作然後判斷文件名或目錄名 , 當然這裏可以使用for each遍歷.
    for(int i = 0 ; i < lists.length ; i++ ) {
        if(lists[i].getName().startsWith(fileName )) {
        System.out.println("find:" + lists[i].getName() );
        }
    }


    }

    /**
     * 主測試方法
     * @param args
     */
    public static void main(String[] args) {
    String file = "F:\\2017\\11\\22\\33";
    //題目1:
//  boolean flag = createDir(file );
//  if(flag ) {
//      System.out.println("創建目錄成功!" );
//  }else {
//      System.out.println("創建目錄失敗!" );
//  }

    //題目2:
//  boolean flag = deleteDir(file );
//  if(flag ) {
//      System.out.println("刪除成功!" );
//  }else {
//      System.out.println("刪除失敗!" );
//  }

    //題目3:
    //獲取它的父目錄 , 我們可以用這個方法來解決刪除目錄的問題
    File file1 = new File(file );
    //System.out.println(file1.getParent() );
    //removeAllDir(file1 );

    //題目4:判斷目錄裏面是否爲空
//  String[] lists = file1.list();
//  if(lists.length > 0 ) {
//      System.out.println("裏面存在" + lists.length + "文件" );
//  }else {
//      System.out.println("裏面沒有存在文件!" );
//  }


    //題目5:利用遞歸打開出當前目錄下的結構
    //showDir(1 , file1 );

    //題目6:在指定目錄中查找文件
//  File fFile = new File("F:\\" );
//  String str = "2017";
//  findFile(str , fFile  );

    //題目7:獲取並打印出系統根目錄
//  File[] roots = File.listRoots();
//  for(File v : roots ) {
//      System.out.println(v.getAbsolutePath() );
//  }

    //題目8:獲取當前目錄 , 這裏獲取方法有點另類 , 但還是非常實用的.
    String currentDir = System.getProperty("user.dir" );    //這裏沒有必須強記 , 只要知道這個方法 用到的時候去查看就可以了.
    System.out.println("當前的目錄爲:" + currentDir );

    }

}

心得

  • 對於遞歸操作 , 我們要做的是先將這個方法(函數)的主要部分實現再去考慮遞歸.

  • 文件操作和目錄操作非常實用而且常用 , 這些例子並沒有將所有的知識點給訓練 , 但是絕大部分是訓練到了 .

  • 我們學完一門技術之後,一定要刻意練習每一個知識點 , 並且進行自己總結記錄(產生自己的心得) , 瞭解每一個知識點可以做什麼事 , 這樣纔是學習的最好的辦法.

發佈了26 篇原創文章 · 獲贊 42 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章