Java對檔案的處理,已經提供非常完整的API
不過像複製檔案的功能,還是要再手動多寫幾行code才行
以下就介紹copy 檔案的方式,順便說一下如何copy 資料夾
1.這是最基本的方式,利用read()方式進行複製動作
public void copyFile(String srFile, String dtFile){
try{
File f1 = new File(srFile);
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
}
catch(FileNotFoundException ex){
ex.printStackTrace();
}
catch(IOException e){
ex.printStackTrace();
}
}
2.在JDK 1.4時,多了一些對IO處理的API放在java.nio這個package,叫做NIO (NEW I/O),先前JAVA提供的IO都會blocking IO,因此導致很多Thread在進行IO處理時就會造成整體效能變差,NIO它的最大優點,是可以在同一條 thread 讀寫多個channel而不會被單一的IO blocking限制效率並且也減少多了透過byte[]方式的動作。所以我們也提供NIO複製的方式
public void copyFile(String srFile, String dtFile){
try{
FileChannel srcChannel = new FileInputStream(srFile).getChannel();
FileChannel dstChannel = new FileOutputStream(dtFile).getChannel();
dstChannel.transferFrom(srcChannel, 0, srcChannel.size());
srcChannel.close();
dstChannel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
3.複製資料夾,當然能複製檔案外,也可以寫個小method來進行資料夾的複製,有點像xcopy的方式,這裡要注意,以下的程式碼copyFile 是傳入File而非上述sample code的String,請自行再調整一下
public void copyDirectory(File source, File target) {
File[] file = source.listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
File sourceDemo = new File(source.getAbsolutePath() + “/”
+ file[i].getName());
File destDemo = new File(target.getAbsolutePath() + “/”
+ file[i].getName());
this.copyFile(sourceDemo, destDemo);
}
if (file[i].isDirectory()) {
File sourceDemo = new File(source.getAbsolutePath() + “/”
+ file[i].getName());
File destDemo = new File(target.getAbsolutePath() + “/”
+ file[i].getName());
destDemo.mkdir();
this.copyDirectory(sourceDemo, destDemo);
}
}
}
參考資料:
先前有提到在開發時常會將String 轉成InputStream或都反之將InputStream轉String,其實還有一種也很常轉換就是將OutputStrem轉成成InputStream,一般是要傳出到其它媒介,如檔案時,可以再接進來做preview的動作,轉換很簡單,以下提供二種方式。
1.
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()) ;
2.這種轉換使用Pipe就最合適了,使用方式也是很單純
PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);
當然除了OutputStrem轉成成InputStream,也可以反轉,以前還不太懂Stream時(現在還是不太懂 =.=||),總想半天為啥java搞的這麼複雜,現在稍為能體會Stream好處了!!
參考資訊:
http://blog.csdn.net/jimmyblyLee/archive/2007/08/20/1750939.aspx
JAVA 在IO 上提供了串流介面讓程式設計師在進行各種輸出入時,變的簡單容易了,
不過在開發中會用到字串的機制大於其它如檔案等,所以在小弟看來
常有可能要將String轉換成InputStream,不過也蠻怪的,一些OpenSource元件或JDK本身提供的
都沒有直接傳入String,不知是不是小弟的觀念不正確~哈 =.=
不過,在小弟看來真的還蠻常遇到這種轉換,所以就加減瞭解一下吧!!
以下提供了String及InputStream互轉的方式,不過要注意一下
因為轉成Byte所以有可能會有中文問題
public InputStream string2InputStream(String str) throws UnsupportedEncodingException…{
ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
return bais;
}
public String inputStream2String(InputStream is) throws IOException…{
byte[] buffer = new byte[is.available()];
is.read(buffer);
return new String(buffer);
}
參考資料:
http://blog.csdn.net/flyforlove/archive/2007/05/16/1611708.aspx
以往如果要取得磁碟資訊,就要自己半人工方式透過作業系統查詢磁碟的方式
例如linux平台就可以用df 指令,Windows平台就要使用dir指令
透過JNI的方式使用Runtime.getRuntime().exec() 來執行這些作業系統的指令再去解析
其中我們想要的資訊,如大家有興趣可以參考以下兩篇:
不過在JDK6出來後,就省事多啦,File元件已經提供相關的功能可以達到上述功能
我們來看看
java.io.File;
File file = new File(“c:”);
file.getTotalSpace();
file.getFreeSpace();
file.getUsableSpace();
上述幾個method就可以找到你想要的資訊,簡單吧!!
參考資訊:
http://java4ever.blogspot.com/2008/06/disk-space-check.html
因為舊網站改版,所以導致原系統的連結無法使用,有些以前有bookmark 過的人要連回 或是 從搜尋引擎來的 都會直接顯示Http Error 404 ,目前先用一些說明改版頁面撐著,於Tomcat web.xml之中設定
<error-page>
<error-code>404</error-code>
<location>/error404.htm</location>
</error-page>
但在使用時發現 FireFox 是ok的 但在IE上時,IE似乎會以自己找不到網頁的頁面取代掉
去查了一下
可以在IE裡調整設定即可正常顯示,調整如下:
工具–>網際網路選項–>進階—>顯示易懂的HTTP錯誤訊息>取消選擇 , 這樣就可以了
不過這樣只能設定爽的,因為大部份的人都是用預設值嘛~~@@
所以要改用另一招
將原本指定錯誤頁頁狀態碼調整為正常,來告訴聰明的IE 這不是一個錯誤, 讓IE不會自動顯示自定的錯誤頁面
方法很簡單,只要在你的錯誤頁面裡加上:
<%
response.setStatus(200); // 200 = HttpServletResponse.SC_OK
%>
這樣就以讓IE變正常點了~^^ (不過就一定要轉JSP or Servlet頁面 而不能用靜態的html頁面來顯了)
資料來源:http://jsf.javaeye.com/blog/141949
近期留言