程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java基礎IO文件拷貝練習題,javaio拷貝練習題

Java基礎IO文件拷貝練習題,javaio拷貝練習題

編輯:JAVA綜合教程

Java基礎IO文件拷貝練習題,javaio拷貝練習題


/**
* 編寫一個程序,把指定目錄下的所有的帶.java文件都拷貝到另一個目錄中,拷貝成功後,把後綴名是.java的改成.txt。
*/

 

1.我們看到這個題還是用大化小的思想來做
分析:1.拷貝 >>> 選擇什麼流呢??>>>拷貝我在上篇博客中寫到,我們用字節流,字符流只讀只寫
2.java結尾 >> 我們可以想到String中的endsWith()方法.
3.拷貝成功後再改後綴名>>File中有一個後綴名的方法renameTo()的方法
4.如果就收拷貝的文件的文件夾中有相同的名字的文件怎麼辦呢?? 想想這個

我們看代碼:第一步:1.拷貝 >>> 選擇什麼流呢??>>>拷貝我在上篇博客中寫到,我們用字節流,字符流只讀只寫
         2.java結尾 >> 我們可以想到String中的endsWith()方法.

/*
     *文件的拷貝
     */
    private static void copy(File src, File dest) throws IOException {
        File[] files = src.listFiles();
        //判斷數組是否為空
        if (files != null) {
            //遍歷數組
            for (File file : files) {
                //是文件並且以java結尾的文件
                if (file.isFile() && file.getName().endsWith(".java")) {
                    //緩沖流拷貝   速度快
                    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                    BufferedOutputStream bos = new BufferedOutputStream(
                            new FileOutputStream(new File(dest, file.getName())));

                    byte[] by = new byte[1024];
                    int len = 0;
                    while ((len = bis.read(by)) != -1) {
                        bos.write(by, 0, len);
                    }
                    //關流
                    bos.close();
                    bis.close();
                    //如果是文件
                } else if (file.isDirectory()) {
                    //在判斷這個文件夾是不是空的或者沒有java文件 那樣我們就不要復制了 定義remove()
                    if (remove(file)) {
                        File newfile = new File(dest, file.getName());
                        newfile.mkdirs();
                        copy(file, newfile);
                    }
                }
            }
        }

    }

    private static boolean remove(File file) {
        File[] files = file.listFiles();
        //判斷數組是否為空
        if (file != null) {
            for (File file2 : files) {
                //是文件並且以java結尾的文件 返回真
                if (file2.isFile() && file2.getName().endsWith(".java")) {
                    return true;
                    //這裡是關鍵  不經要是文件  而且還要滿足文件中要包含java文件
                } else if (file2.isDirectory() && remove(file2)) {
                    return true;
                }
            }
        }
        //條件不符合返回false
        return false;
    }
}

第二步:3.拷貝成功後再改後綴名>>File中有一個後綴名的方法renameTo()的方法 
    4.如果就收拷貝的文件的文件夾中有相同的名字的文件怎麼辦呢?? 想想這個

    //.java修改成.txt  
    private static void revamp(File dest) throws IOException{    
        File[] file = dest.listFiles();
        for (File file2 : file) {
            if(file2.isFile()){
                //獲取文件名稱字符串
                String sb = file2.getName();
                    //判斷是否是Java文件
                if(sb.endsWith(".java")){
                    StringBuilder sb1 = new StringBuilder(sb);
                    //替換  把java字符串  替換成.txt字符串
                    sb1.replace(sb1.toString().indexOf(".java"), sb1.length(), ".txt");
                    //新建文件
                    File newfile = new File(dest, sb1.toString());
                    
                    //再來一次循環  循環本次數組中的文件和文件夾
                    for (File file3 : file) {
                        //如果裡面有相同的文件的就刪除在    重命名
                        if(file3.isFile() && newfile.getName().equals(file3.getName())){
                            file3.delete();
                        }
                    }
                    //判斷文件夾中是否存在重名
                    file2.renameTo(newfile);
                }
                //如果是文件  就遞歸
            } else if (file2.isDirectory()) {
                revamp(file2);
            }
        }
    }

main方法

public static void main(String[] args) throws IOException {
        //封裝文件地址
        File src = new File("E:\\IO流");
        File dest = new File("E:\\IO");
        //拷貝
        copy(src, dest);
        //重命名
        revamp(dest);
    }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved