1. 程式人生 > >JAVA中檔案操作大全

JAVA中檔案操作大全

一.獲得控制檯使用者輸入的資訊
/**//**獲得控制檯使用者輸入的資訊
     * @return
     * @throws IOException
     
*/

    
public String getInputMessage() throws IOException...{
        System.
out.println("請輸入您的命令∶");
        
byte buffer[]=newbyte[1024];
        
int count=System.in.read(buffer);
        
char[] ch=newchar[count-2];//最後兩位為結束符,刪去不要

for(int i=0;i<count-2;i++)
            ch[i]
=(char)buffer[i];
        String str
=new String(ch);
        
return str;
    }

    可以返回使用者輸入的資訊,不足之處在於不支援中文輸入,有待進一步改進。

    二.複製檔案
    
1.以檔案流的方式複製檔案
/**//**以檔案流的方式複製檔案
     * @param src 檔案源目錄
     * @param dest 檔案目的目錄
     * @throws IOException  
     
*/

    
publicvoid
 copyFile(String src,String dest) throws IOException...{
        FileInputStream 
in=new FileInputStream(src);
        File file
=new File(dest);
        
if(!file.exists())
            file.createNewFile();
        FileOutputStream 
out=new FileOutputStream(file);
        
int c;
        
byte buffer[]=newbyte
[1024];
        
while((c=in.read(buffer))!=-1)...{
            
for(int i=0;i<c;i++)
                
out.write(buffer[i]);        
        }

        
in.close();
        
out.close();
    }

    該方法經過測試,支援中文處理,並且可以複製多種型別,比如txt,xml,jpg,doc等多種格式

    三.寫檔案

    
1.利用PrintStream寫檔案

/**//**
     * 檔案輸出示例
     
*/

    
publicvoid PrintStreamDemo()...{
        
try ...{
            FileOutputStream 
out=new FileOutputStream("D:/test.txt");
            PrintStream p
=new PrintStream(out);
            
for(int i=0;i<10;i++)
                p.println(
"This is "+i+" line");
        }
catch (FileNotFoundException e) ...{
            e.printStackTrace();
        }

    }

    
2.利用StringBuffer寫檔案
publicvoid StringBufferDemo() throws IOException......{
        File file
=new File("/root/sms.log");
        
if(!file.exists())
            file.createNewFile();
        FileOutputStream 
out=new FileOutputStream(file,true);        
        
for(int i=0;i<10000;i++)......{
            StringBuffer sb
=new StringBuffer();
            sb.append(
"這是第"+i+"行:前面介紹的各種方法都不關用,為什麼總是奇怪的問題 ");
            
out.write(sb.toString().getBytes("utf-8"));
        }
        
        
out.close();
    }

    該方法可以設定使用何種編碼,有效解決中文問題。
四.檔案重新命名
    
/**//**檔案重新命名
     * @param path 檔案目錄
     * @param oldname  原來的檔名
     * @param newname 新檔名
     
*/

    
publicvoid renameFile(String path,String oldname,String newname)...{
        
if(!oldname.equals(newname))...{//新的檔名和以前檔名不同時,才有必要進行重新命名
            File oldfile=new File(path+"/"+oldname);
            File newfile
=new File(path+"/"+newname);
            
if(newfile.exists())//若在該目錄下已經有一個檔案和新檔名相同,則不允許重新命名
                System.out.println(newname+"已經存在!");
            
else...{
                oldfile.renameTo(newfile);
            }
 
        }
         
    }
    五.轉移檔案目錄 
    轉移檔案目錄不等同於複製檔案,複製檔案是複製後兩個目錄都存在該檔案,而轉移檔案目錄則是轉移後,只有新目錄中存在該檔案。 
    
/**//**轉移檔案目錄
     * @param filename 檔名
     * @param oldpath 舊目錄
     * @param newpath 新目錄
     * @param cover 若新目錄下存在和轉移檔案具有相同檔名的檔案時,是否覆蓋新目錄下檔案,cover=true將會覆蓋原檔案,否則不操作
     
*/

    
publicvoid changeDirectory(String filename,String oldpath,String newpath,boolean cover)...{
        
if(!oldpath.equals(newpath))...{
            File oldfile
=new File(oldpath+"/"+filename);
            File newfile
=new File(newpath+"/"+filename);
            
if(newfile.exists())...{//若在待轉移目錄下,已經存在待轉移檔案
if(cover)//覆蓋
                    oldfile.renameTo(newfile);
                
else
                    System.
out.println("在新目錄下已經存在:"+filename);
            }

            
else...{
                oldfile.renameTo(newfile);
            }

        }
       
    }

    六.讀檔案
    
1.利用FileInputStream讀取檔案
    
/**//**讀檔案
     * @param path
     * @return
     * @throws IOException
     
*/

    
public String FileInputStreamDemo(String path) throws IOException...{
        File file
=new File(path);
        
if(!file.exists()||file.isDirectory())
            
thrownew FileNotFoundException();
        FileInputStream fis
=new FileInputStream(file);
        
byte[] buf =newbyte[1024];
        StringBuffer sb
=new StringBuffer();
        
while((fis.read(buf))!=-1)...{
            sb.append(
new String(buf));    
            buf
=newbyte[1024];//重新生成,避免和上次讀取的資料重複
        }

        
return sb.toString();
    }

2.利用BufferedReader讀取

    在IO操作,利用BufferedReader和BufferedWriter效率會更高一點


    
/**//**讀檔案
     * @param path
     * @return
     * @throws IOException
     
*/

    
public String BufferedReaderDemo(String path) throws IOException...{
        File file
=new File(path);
        
if(!file.exists()||file.isDirectory())
            
thrownew FileNotFoundException();
        BufferedReader br
=new BufferedReader(new FileReader(file));
        String temp
=null;
        StringBuffer sb
=new StringBuffer();
        temp
=br.readLine();
        
while(temp!=null)...{
            sb.append(temp
+"");
            temp
=br.readLine();
        }

        
return sb.toString();
    }



    
3.利用dom4j讀取xml檔案 

    
/**//**從目錄中讀取xml檔案
     * @param path 檔案目錄
     * @return
</div