熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

文件名到URL的轉換

2013-11-15 09:48:54  來源: JSP教程 

  主題:
  * Pathnames to URLs
  * Using Vector in the Collection Framework
  * Reading/Writing Unicode Using I/O Stream Encodings
  
  CONVERTING PATHNAMES TO URLS
  
  FiletoURL 方法是 Java(tm) Platform 的新特性 可以用來將 pathname
  轉換為URL格式
  
  簡單示例如下:
  
  import javaio*;
  import *;
  
  public class url {
  public static void main(String args[])
  {
  if (argslength != ) {
  Systemerrprintln(missing filename);
  Systemexit();
  }
  File f = new File(args[]);
  try {
  URL u = ftoURL();
  Systemoutprintln(u);
  }
  catch (MalformedURLException e) {
  Systemerrprintln(e);
  }
  }
  }
  
  For input of:
  
  $ java url papertxt (current directory is t:\tmp)
  
  output is:
  
  file:/T:/tmp/papertxt
  
  得到的URL可以用來指示Netscape或者IE來察看本地的文件
  
  這個方法時的應用程序可以將本地文件與基於Web的資源一視同仁的編程
  
  USING VECTOR IN THE COLLECTION FRAMEWORK
  
  Collections 是 Java Platform 的新特性 用於組織和操作大量的數據元素
  再如 ArrayList 可以作為 Vector 的替代者 HashMap 和 Hashtable 極為相像
  
  像 Vector 這樣的原先使用的類依然可以使用 但是用新的代用品更為優秀
  如何在兩者之間轉化成為了一個問題 你可能在應用程序中想把 Vector 對象
  轉換為 ArrayList 如下示例說明了之一轉換過程:
  
  import javautil*;
  
  public class convert {
  public static void process(ArrayList al)
  {
  for (int i = ; i < al.size(); i++)
  System.out.println(al.get(i));
  }
  
  public static void main(String args[])
  {
  Vector vec = new Vector();
  
  vec.addElement("123");
  vec.addElement(new Integer(456));
  vec.addElement(new Double(789));
  
  process(new ArrayList(vec));
  }
  }
  
  首先生成一個 Vector 對象並加入若干個數據元素. 然後調用 process 方法,
  並將一個 ArrayList 作為參數, 這個 ArrayList 對象是通過帶有一個 Vector
  對象的參數的構造函數生成的. 更准確的說, 在這裡, ArrayList 的構造函數
  所需的參數是從 "Collection" 接口實現的, Vector 的上兩層基類
  java.util.AbstractCollection 正是實現的 Collection 接口, 同樣 ArrayList
  對象也可以用同樣的方法從構造函數中獲得.
  
  READING/WRITING UNICODE USING I/O STREAM ENCODINGS
  
  與常用的其他語言不同 Java 使用雙字節的 Unicode 字符集. 這樣做帶來的問題是:
  Java的字符集是如何在磁盤文件上存儲的, 並且 Java 如何使用現有的大量 ASCII
  格式的數據?
  
  早期的 JDK(tm) , 比如 1.0.2 版本, 中這個問題沒有得到解決. 例如:
  DataInputStream.readLine 方法用於讀取整行的輸入, 但他無法正確的將字節轉化為
  字符, 因此已被廢棄. 在 Unicode 得到廣泛的使用前, 這個問題仍然是重要的.
  
  解決問題之道是使用 Reader 和 Writer 這一對 I/O 類. 他們是基於字節流的
  (如同FileInputStream), 並且實現字符, 字節的雙向轉換.
  
  下面的程序可以得到系統的缺省轉換格式:
  
  public class encode {
  public static void main(String args[])
  {
  String p = System.getProperty("file.encoding");
  System.out.println(p);
  }
  }
  
  在我的機器和 Java 2 軟件上, 輸出為 "GBK", 這個格式為:
  
  GBK, Simplified Chinese
  
  對於 encodings 的表格可以從如下獲得:
  
  
  
  如果你希望直接指定轉換方式, 下面的程序就是范例, 他將Unicode字母表中的所有小寫字母寫入文件。tW.winGWit.COm
  在這些字母中, 有一些的高字節是非零的(就是那些大於'\u00ff'的字母),因此正確的轉化十分重要。
  這裡使用的方式為 UTF-8, 他能夠將ASCII字符轉換為單字節字符,而其他字符仍然保持兩到三個字節。
  
  import java.io.*;
  
  public class enc1 {
  
  public static void main(String args[]) {
  try {
  FileOutputStream fos = new FileOutputStream("out");
  OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF8");
  for (int c = '\u0000'; c <= '\uffff'; c++) {
  if (!Character.isLowerCase((char)c))
  continue;
  osw.write(c);
  }
  osw.close();
  } catch (IOException e) {
  System.err.println(e);
  }
  }
  }
  
  相反的轉換過程如下;
  
  import java.io.*;
  
  public class enc2 {
  
  public static void main(String args[]) {
  try {
  FileInputStream fis = new FileInputStream("out");
  InputStreamReader isr = new InputStreamReader(fis, "UTF8");
  for (int c = '\u0000'; c <= '\uffff'; c++) {
  if (!Character.isLowerCase((char)c))
  continue;
  int ch = isr.read();
  if (c != ch)
  System.err.println("error");
  }
  isr.close();
  } catch (IOException e) {
  System.err.println(e);
  }
  }
  }
  
  InputStreamReader 和 OutputStreamWriter 是用於字節流域字符流進行相互轉化的類。

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19157.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.