1. 程式人生 > 其它 >筆記圖床解決方案(新)

筆記圖床解決方案(新)

圖床選擇

  • 鑑於免費的圖床有多種不穩定因素,所以推薦選擇較為低價的【阿里雲OSS】;
  • 使用【阿里雲OSS】作為PicGo圖床的教程在此
  • 教程地址:阿里雲OSS搭建圖床

舊圖床地址替換

  • Gitee圖床失效的具體表現及做法

  • 我本人之前使用的是 Gitee 作為圖床,但圖床倉庫被封,本地 Markdown檔案無法訪問原圖片地址
  • 所以需要將原來 MarkDown 檔案裡的對應圖片地址內容替換
  • 自己寫了個 java 程式碼進行目錄下所有文字檔案的內容替換,歡迎使用

class HelpTool{

    //獲取該資料夾下的所有檔案,資料夾除外
    public List<File> getSubFiles(String dirPath){
        List<File> subFiles = new ArrayList<>();
        File file = new File(dirPath);
        if(file.isDirectory()){
            //判斷是否是目錄,是目錄則進行下一步操作
            for (File curFile : file.listFiles()){
                if (curFile.isDirectory()){
                    //是目錄,則遞迴找檔案
                    subFiles.addAll(getSubFiles(curFile.getPath()));
                }else {
                    //不是目錄,則直接新增該檔案
                    subFiles.add(curFile);
                }
            }
        }else {
            subFiles.add(file);
        }
        return subFiles;
    }

    //獲取指定檔案內的文字
    private String getContent(File file){
        //採用位元組流讀取檔案
        if(file.isFile() && file.exists()){
            try {
                FileInputStream fileInputStream = new FileInputStream(file);
                InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                StringBuilder sbd = new StringBuilder();
                String text = null;
                while((text = bufferedReader.readLine()) != null){
                    sbd.append(text);
                    sbd.append('\n');
                }
                //關閉
                bufferedReader.close();
                inputStreamReader.close();
                fileInputStream.close();
                
                return sbd.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return "";
    }

    //將指定內容寫入到指定檔案中
    private boolean writeToFile(File file, String content){
        if(file.exists() && file.isFile()){
            try {
                FileOutputStream outputStream = new FileOutputStream(file);
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
                BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
                bufferedWriter.write(content);
                //關閉
                bufferedWriter.close();
                outputStreamWriter.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
        return false;
    }

    //替換指定檔案路徑的檔案內容
    public boolean changeContent(File file, String originalContent, String newContent){
        if(!file.isDirectory()){
            //獲取文字內容
            String content = getContent(file);
            //列印替換後的文字內容
            if(writeToFile(file,content.replaceAll(originalContent,newContent))){
                System.out.println(file.getPath()+"---------------------替換成功!");
                return true;
            }
        }

        System.out.println(file.getPath()+"------------非檔案!操作失敗!");
        return false;
    }
}

public class PathChange {

    //資料夾路徑
    static String directoryPath = "";
    //要替換的內容
    static String originalContent = "";
    //替換後的內容
    static String newContent = "";

    public static void main(String[] args) {
        HelpTool helpTool = new HelpTool();
        List<File> files = helpTool.getSubFiles(directoryPath);
        for (File curFile : files){
            helpTool.changeContent(curFile,originalContent,newContent);
        }
    }
}