1. 程式人生 > >java 操作檔案File類

java 操作檔案File類

File物件可以作為引數傳遞給流的建構函式。
</pre></div><div></div><h2>File 類的常用的方法。</h2><div><pre name="code" class="java">import java.io.*;
/*File類的常見方法
 1.建立。
   boolean  createNewFile();
   boolean  mkdir();建立資料夾
   boolean mkdirs();建立多級資料夾。
   
 2.刪除。
   boolean delete();
   void  deleteOnExit();在程式退出時刪除檔案。
  
 3.判斷。
     boolean canExcute(); 判斷是否可執行
     boolean exists(); 檔案事是否存在。
     isFile();檔案
     isDirectory();資料夾
     isHidden();//java能得到檔案中的隱藏檔案但是對隱藏檔案時不能訪問的
     isAbsolute();//絕對路徑即時不存在也能得到。
 4.獲取資訊。
     getName();
     getPath();
     getParent();
     
     getAbsolutePath();
     long lastModified();
     long length();
 
 */
public class FileDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
          method_4();
	}
	  public static void method_1() throws IOException{
   		  File f= new File("d:\\file.txt");
   		  f.deleteOnExit();//告訴程式當程式結束時才刪除f關聯的檔案 即使發生異常也不受影響
   		//System.out.println("creat:"+f.createNewFile());
   		 System.out.println("delete:"+f.delete());
		  
	  }
	  public static void method_2(){
		   File  f = new File("file.txt");
		  // System.out.println("execute:"+f.canExecute());
		  // System.out.println("exists:"+f.exists());
		   //建立資料夾
		   File dir = new File("d:\\abc");
		   File dirs = new File("d:\\abc\\a\\b\\c");
		    System.out.println("dir:"+dir.mkdir());
		    System.out.println("dirs:"+dirs.mkdirs());
	  }
	  public static void method_3(){
		  File f = new File("file.txt");
		  System.out.println("path:"+f.getPath());
		  System.out.println("absolutePath:"+f.getAbsolutePath());
		  System.out.println("parentpath:"+f.getParent());//該方法返回的是絕對路徑中檔案的父目錄。如獲取的是相對路徑返回的是null。
		                                                   // 如果相對路徑中有上一層目錄那麼該目錄就是返回結果。
	  }
	  public static void method_4(){
		  File f1= new File("d:\\a.txt");
		  File f2= new File("haha.txt");
		  System.out.println(f2.renameTo(f1));//類似於剪下功能
	  }
     public static void consMethod(){
    	 //將a.txt封裝成file物件,可以將已有的和為出現的檔案或者資料夾封裝為物件。
          File f1 = new File("d:\\a.txt");
          
          File f2 = new File("d:\\abc","b.txt");
          File d = new  File("d:\\abc");
          File f3= new File(d,"a.txt");
          System.out.println("f1:"+f1);
          System.out.println("f2:"+f2);
          System.out.println("f3:"+f3);
          //跨平臺分隔符<span style="font-family: Arial, Helvetica, sans-serif;">File.separator</span>
          File f4 = new File("d:"+File.separator+"abc"+File.separator+"a.txt");
          System.out.println("f4:"+f4);
        		  
     }
}

獲取系統根目錄例子

import java.io.*;
public class FileDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
          listDemo();
	}
	
	public static void listDemo(){
		 File f = new File("d:\\");
		 String[] names= f.list();//呼叫list方法的物件必須封裝一個目錄,封裝檔案返回為null
		 for(String name : names){
			 System.out.println(name);
		 }
	}
    public static void listRootsDemo(){
    	File[] files=File.listRoots();
    	
    	for(File f: files)
    	{
    		System.out.println(f);
    	}
    }
}

遞迴輸出檔案列表

import java.io.*;
/*
 列出指定目錄下的檔案或資料夾,包含子目錄中的內容。
 也就是列出指定目錄下所有內容。
 
 遞迴注意
 
 1 注意要有結束
 
 2 要注意遞迴的次數 防止記憶體溢位
 */

public class FileDemo3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		  File  f= new File("d:\\u盤備份");
             showDir(f,0);
		   //System.out.println(getSum(10));
	}
	
	   public  static String getLevel(int level)
	   {
		    StringBuilder sb= new StringBuilder();
		    for(int i=0; i<level;i++){
		    	sb.append(" ");
		    }
		    sb.append("|--");
		   return sb.toString();
	   }
     public static void showDir(File dir ,int level)
     {    
    	 System.out.println(getLevel(level)+dir.getName());
          level++;
    	  File[] files= dir.listFiles();
    	  for(int i=0;i<files.length;i++)
    	  {
    		  if(files[i].isDirectory())
    			  showDir(files[i],level);
    		  else
    			  System.out.println(getLevel(level)+files[i]);
    	  }
    	  
       
     }
     //補充:遞迴方法求和 
     public static int getSum(int num){
		 if(num==1)
			 return 1;
		 else return num+getSum(--num);
	  }
}

刪除資料夾例項

import java.io.*;
/*
 * 刪除資料夾要先刪除裡邊的檔案。因此就要用到遞迴了
 * 從裡往外刪除檔案
 * 
 */
public class FileRemoveDir {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
         File file= new File("d:\\abc");
         removeDir(file);
	}
     public static void removeDir(File dir)
     {
    	 File[] files =dir.listFiles();
    	 for(int i=0;i<files.length;i++)
    	 {
    		 if(files[i].isDirectory())
    		 {
    			 removeDir(files[i]);
    		 }else
    			 System.out.println(files[i].toString()+"file:"+files[i].delete());
    	 }
    	 System.out.println(dir+"dir:"+dir.delete());
     }
}

查詢資料夾指定型別儲存在檔案中

import java.io.*;
import java.util.*;
/*
 將一個指定目錄下的java檔案的絕對路徑,儲存到一個檔案中。
 建立一個java檔案列表清單。
 
 思路:
 1.對指定的目錄進行遞迴。
 2.獲取遞迴過程所有的java檔案的路徑。
 3.將這些路徑儲存到集合中。
 4.將集合中的資料寫入到一箇中。
 
 * */
public class JavaFileList {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		File dir = new File("d:\\u盤備份");
		List<File> list= new ArrayList<File>();
		fileToList(dir,list);
        File f =new File("javaList.txt"); 
         writeToFile(list,f);
	}
    public static void fileToList(File dir,List<File> list)
    {
    	File[] files = dir.listFiles();
    	for (File file : files){
    		if(file.isDirectory())
    		{
    			fileToList(file,list);
    		}
    		else
    		{
    			if(file.getName().endsWith(".java"))
    				list.add(file);
    		}
    		
    	}
    }
    public static void writeToFile(List<File> List, File f) throws IOException
    {
    	BufferedWriter bw= new BufferedWriter(new FileWriter(f));
    	try{
    		for(File file: List)
    		{
    			String path= file.getAbsolutePath();
    			bw.write(path);
    			bw.newLine();
    			bw.flush();
    			
    		}
    	}catch(Exception e){
    		throw new RuntimeException("失敗!");
    	}
    	finally{
    		try{
    			if(bw!=null)
    				bw.close();
    		}catch(Exception ex){
    			throw new RuntimeException("關閉失敗!");
    		}
    	}
    	
    }
}

Propreties與流關聯的集合類HashTable的子類

import java.io.*;
import java.util.*;
public class PropertiesDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
                    //setAndget();
		//method_1();
		loadDemo();
	}
	//load方法進行檔案的集合載入。
	public static void loadDemo() throws IOException
	{
		FileInputStream fis= new FileInputStream("info.txt");
		Properties prop= new Properties();
		prop.load(fis);
		prop.list(System.out);
		prop.setProperty("wangwu","25");
		FileOutputStream fos= new FileOutputStream("info.txt");
		prop.store(fos, "haha");
	}
	//將info.txt中的鍵值資料存到集合中進行操作。
	/*步驟:
	 1.用一個流和info.txt檔案關聯。
	 2.讀取一行資料,將該資料用"="進行切割。
	 3.等號左邊為建,右邊衛值。存入Porperties集合中即可.
	 */
	public static void method_1() throws IOException
	{
	BufferedReader br= new BufferedReader(new FileReader("info.txt"));
	String line=null;
	Properties prop= new Properties();
	while((line=br.readLine())!=null)
	{
		String[] s=line.split("=");
		prop.setProperty(s[0], s[1]);
	}
	System.out.println(prop);
	}
	//設定和獲取元素
	public static void setAndget()
	{
		Properties prop = new Properties();
		prop.setProperty("zhangsan", "34");
		prop.setProperty("lisi", "22");
		System.out.println(prop);
		String value =prop.getProperty("zhangsan");
		System.out.println(value);
		Set<String>  names = prop.stringPropertyNames();
		for(String name:names)
		{
			System.out.println(prop.getProperty(name));
		}
	}
}

Properties實現程式的使用次數限制

/*用於記錄應用程式的次數。
  如果使用次數已到,那麼給出註冊資訊。
  
    思路:
    通過Properties屬性檔案將使用次數的屬性存在此檔案中,每次使用一次將計數
    屬性修改並重新存到屬性檔案中,此操作就要借用Properties物件進行操作。
 屬性檔案用於鍵值對的儲存方式。
 這樣便於對資料操作。
 
 鍵值對是map集合
 資料是以檔案的形式儲存,使用io資料。
 */
import java.io.*;
import java.util.*;
public class PropertiesCount {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
         Properties prop = new Properties();
          File file= new File("count.ini");
          if(!file.exists())
        	  file.createNewFile();
         FileInputStream fis = new FileInputStream(file);
         prop.load(fis);
         int count=0;
         String value= prop.getProperty("time");
         if(value!=null)
         {
        	 count =Integer.parseInt(value);
        	 if(count>=5)
        	 {
        		 System.out.println("您好,使用次數已到請付費");
        		 return;
        	 }
         }
         count++;
         prop.setProperty("time",count+"");
         FileOutputStream fos = new FileOutputStream(file);
         prop.store(fos,"haha");
	}
      
}

PrintStream與PrintWriter 列印流的用法

/*列印流
 為了方便各種資料型別的原樣列印。
 
 位元組列印流
 PrintStream
 可以接收的引數型別
 1.file物件 File
 2.字串路徑。String
 3.位元組輸出流 OutputStream

  PrintWriter
 可以接收的引數型別
 1.file物件 File
 2.字串路徑。String
 3.位元組輸出流 OutputStream
 4.字元輸出流 Writer

 */
import java.io.*;
public class PrintStreamDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
              BufferedReader bufr=
            		  new BufferedReader(new InputStreamReader(System.in));
              PrintWriter out = new PrintWriter(System.out);
              String line = null;
              while((line=bufr.readLine())!=null)
              {
            	  out.println(line.toUpperCase());
            	  out.flush();
              }
              out.close();
              bufr.close();<pre name="code" class="java">
}}

DataInputStream和DataOutputStream 基本資料操作流

import java.io.*;
/*
 DataStream類主要用於操作基本資料型別的流的讀取和寫入
 */
public class DataInputStreamDemo {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
         //writeData();
		//readData();
		writeUTFDemo();
	}
	public static void writeUTFDemo() throws IOException
	{
		 DataOutputStream dos =
				   new DataOutputStream(new FileOutputStream("data.txt"));
		 dos.writeUTF("你好");
		 dos.close();
	}
	public static void readData() throws Exception
	{
		DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
		int num =dis.readInt();
		boolean b= dis.readBoolean();
		double d= dis.readDouble();
		System.out.println("num:"+num);
		System.out.println("b:"+b);
		System.out.println("d:"+d);
	}
   public static void writeData() throws IOException
   {
	   DataOutputStream dos =
			   new DataOutputStream(new FileOutputStream("data.txt"));
	   dos.writeInt(234);
	   dos.writeBoolean(true);
	   dos.writeDouble(444.456);
	   dos.close();
	   
   }
}


ObjectInputStream和ObjectOutputStream物件操作流