1. 程式人生 > >java檔案操作 之 建立資料夾路徑和新檔案

java檔案操作 之 建立資料夾路徑和新檔案

一:問題

(1)java 的如果資料夾路徑不存在,先建立;

(2)如果檔名 的檔案不存在,先建立再讀寫;存在的話直接追加寫,關鍵字true表示追加

(3)File myPath = new File(toFilePath);
   if ( !myPath.exists()){//若此目錄不存在,則建立之// 這個東西只能簡歷一級資料夾,兩級是無法建立的。。。。。
           myPath.mkdir();
           System.out.println("建立資料夾路徑為:"+ toFilePath);
}
         如上程式碼只能建立一級目錄,不能夠建立二級目錄;即只能建立當前級的目錄,如果上一級目錄還不存在,則建立失敗;當然可以通過遞迴建立來解決這個問題

File myPath = new File(toFilePath); 僅僅是把路徑傳遞給了File.java類的私有屬性,請看原始碼,並沒有開啟檔案,所以不會丟擲FileNotFoundException

(4)//寫入檔名處理

                String fileN = toFilePath + "\\" + fileName;
            BufferedWriter writer = new BufferedWriter(new FileWriter(new File(fileN)));

       與下面的程式碼對比

File file=new File(originalPath);
                if(file.isFile() && file.exists()){ //判斷檔案是否存在
               InputStreamReader read = new InputStreamReader(
               new FileInputStream(file),encoding);//考慮到編碼格式
                BufferedReader bufferedReader = new BufferedReader(read);

}

其實,FileWriter 是包裝了(呼叫了) FileOutputStream()函式 原始碼如下:所以兩者有些類似的,只是stream可以過濾編碼罷了

public FileWriter(File file) throws IOException {
        super(new FileOutputStream(file));
    }

二:程式碼實現

package edu.tju.cs;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;


public class AllTest {
	
	/*public static void main(String[] args){
		System.out.println("****\\\\");
		String str = "a\\b\\b\\c.csv|aaaaa";
		String[] chars = str.split("\\\\");
		String[] fileName = chars[3].split("\\.");// u002e
		String[] tmp = chars[3].split("\\u007c");//  \\u007c
		for(String cha:chars){
			System.out.println(cha);
		}
		System.out.println(fileName[0]);
		System.out.println(tmp[1]);
	}*/
	
	 public static void main(String args[])
	 {
	    	StringBuffer fileBuf=new StringBuffer();
	    	String filePar = "d:\\test";// 資料夾路徑
	    	File myPath = new File( filePar );
	        if ( !myPath.exists()){//若此目錄不存在,則建立之
	            myPath.mkdir();
	            System.out.println("建立資料夾路徑為:"+ filePar);
	        }
	        // 資料夾路徑存在的情況下
	        String filename = "test.txt";// 檔名
			try {
				FileWriter fw = new FileWriter(filePar + "\\" + filename,true);// filePar + "\\" + filename,true
	        	// FileWriter 就是牛,如果檔名 的檔案不存在,先建立再讀寫;存在的話直接追加寫,關鍵字true表示追加
				String originalLine = "aaaaaaaaaa" + "\n";// 
	        	System.out.println("*** "+ originalLine);
	        	fw.write(originalLine);
	        	// 關閉寫檔案,每次僅僅寫一行資料,因為一個讀檔案中僅僅一個唯一的od
	            fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	  }
}

總之,FileWriter 就是牛,如果檔名 的檔案不存在,先建立再讀寫;存在的話直接追加寫,關鍵字true表示追加   但是他只能一行一行的讀寫,不如代緩衝的讀寫效率高