主題:
* Pathnames to URLs
* Using Vector in the Collection Framework
* Reading/Writing Unicode Using I/O Stream Encodings
CONVERTING PATHNAMES TO URLS
File
轉換為URL格式
簡單示例如下:
import java
import
public class url {
public static void main(String args[])
{
if (args
System
System
}
File f = new File(args[
try {
URL u = f
System
}
catch (MalformedURLException e) {
System
}
}
}
For input of:
$ java url paper
output is:
file:/T:/tmp/paper
得到的URL可以用來指示Netscape或者IE來察看本地的文件
這個方法時的應用程序可以將本地文件與基於Web的資源一視同仁的編程
USING VECTOR IN THE COLLECTION FRAMEWORK
Collections 是 Java
再如
像 Vector 這樣的原先使用的類依然可以使用
如何在兩者之間轉化成為了一個問題
轉換為 ArrayList
import java
public class convert {
public static void process(ArrayList al)
{
for (int 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