JAVA中檔案操作大全
阿新 • • 發佈:2019-02-15
一.獲得控制檯使用者輸入的資訊
/** *//**獲得控制檯使用者輸入的資訊
* @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
/** *//**獲得控制檯使用者輸入的資訊
* @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
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
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