Archive

‘JAVA’ 分類過的Archive

Java Copy 檔案及資料夾的方法

2008年8月20日 2 則評論

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);  
           }  
       }
  }

參考資料:

Categories: JAVA Tags: , ,

Java OutputStream 轉換為InputStream

2008年8月19日 尚無評論

   先前有提到在開發時常會將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

Categories: JAVA Tags: , ,

String 如何轉換成 InputStream?

2008年8月8日 尚無評論

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

Categories: JAVA Tags: ,

用JAVA如何取得磁碟空間 for JDK6 (How to check Disk Space)?

2008年8月7日 尚無評論

     以往如果要取得磁碟資訊,就要自己半人工方式透過作業系統查詢磁碟的方式
例如linux平台就可以用df 指令,Windows平台就要使用dir指令
透過JNI的方式使用Runtime.getRuntime().exec() 來執行這些作業系統的指令再去解析
其中我們想要的資訊,如大家有興趣可以參考以下兩篇:


不過在JDK6出來後,就省事多啦,File元件已經提供相關的功能可以達到上述功能
我們來看看

java.io.File;

File file = new File(“c:”);
//取得C:\ 的總total空間
file.getTotalSpace();
//取得剩餘空間
file.getFreeSpace();
//取得已使用的空間
file.getUsableSpace();

上述幾個method就可以找到你想要的資訊,簡單吧!!

參考資訊:
http://java4ever.blogspot.com/2008/06/disk-space-check.html

Categories: JAVA Tags: ,

排除Tomcat 設定Error 404 頁面於IE 無法正常顯示

2008年8月4日 尚無評論

因為舊網站改版,所以導致原系統的連結無法使用,有些以前有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

Categories: JAVA Tags:
分頁: 上一頁 1 2 3 4 5 6 7 下一頁