1 如何獲得某一個目錄下的文件列表?
1?File?MyDir?=?new?File("C:/Windows/."
);?
2?
3?String[]?FileNames?=?MyDir.list();?
2 如何實現一個打開文件或者是存儲文件對話框?
1?AWT:?FileDialog類?+
?FilenameFilter類?
2?
3?Swing:?JFileChooser類?+?FileFilter類
其中,基于Swing的解決方案功能更加強大,界面也更加美觀。
3 利用FileReader/FileOutputStream拷貝中文文件出錯?
利用如下代碼片斷拷貝中文文件不會出錯:
1?int
?c;?
2?
3?while?((c?=?MyFileReader.read())?!=?-1
)?
4?
5?MyFileWriter.write(c);
利用如下代碼片斷拷貝中文文件會導致文件內容錯誤:
1?int
?c;?
2?
3?while?((c?=?MyFileReader.read())?!=?-1
)?
4?
5?MyFileOutputStream.write(c);
造成這個問題的原因是:FileReader.read()返回一個int,其取值范圍是
0 到65535,通常來說是兩個字節的;FileWriter.write(int c)向文件寫
入一個int,通常來說也是兩個字節的,如果某個字符的高位字節為空,那
么其高位字節將被舍棄;FileOutputStream.write(int b)雖然接受一個
int作為參數,實際上只向文件寫入一個字節,如果傳遞過來的參數是一個
雙字節的漢字,其高位字節將被舍棄,造成文件內容錯誤。
建議:永遠只使用InputStream/OutputStream進行IO操作。
利用如下代碼片斷拷貝中文文件不會出錯:
1?int
?c;?
2?
3?while?((c?=?MyFileInputStream.read())?!=?-1
)?
4?
5?MyFileOutputStream.write(c);
4 如何顯示和存儲拉丁語言中的特殊字符
使用統一碼Unicode可以顯示和存儲拉丁語言中的特殊字符。具體應用范例
如下:
?1?MyJTextArea.append("\u00E1"
);?
?2?
?3?MyJTextArea.append("\u00E2"
);?
?4?
?5?MyJTextArea.append("\u00E3"
);?
?6?
?7?MyJTextArea.append("\u00E4"
);?
?8?
?9?MyJTextArea.append("\u00E5"
);?
10?
11?
12?
13?MyFileOutputStream.write(MyJTextArea.getText().getBytes("UTF-8"
));?
14?
15?MyFileOutputStream.close();
同樣,在讀取文件的時候也需要將讀到的內容轉換成統一碼。
1?byte[]?b?=?new?byte
[MyFile.length()];?
2?
3?FileInputStream?in?=?new
?FileInputStream(MyFile);?
4?
5?
in.read(b);?
6?
7?MyJTextArea.append(new?String(b,?"UTF-8"));
5 如何利用文件進行數據存取
對于一般的科學計算應用程序,DataInputStream和DataOutputStream類通
常是最好的選擇。這兩個類提供了存取各種數據的方法。下面的范例演示了
構造DataInputStream和DataOutputStream的方法:
1?MyDataInputStream?=?new
?DataInputStream(?
2?
3?new
?FileInputStream(MyInputFile));?
4?
5?MyDataOutputStream?=?new
?DataOutputStream(?
6?
7?new?FileOutputStream(MyOutputFile));?
利用ObjectInputStream和ObjectOutputStream同樣可以進行數據存取,需
要注意的是這樣做增加了硬盤的開銷,因為進行對象序列化過程添加了一
些額外的信息。在利用ObjectInputStream和ObjectOutputStream進行通訊
的時候,雖然數據發收過程得到了大大簡化,但是對帶寬的要求也大大的
提高了。
6 文件操作的基本原則是什么?
a. 避免多次訪問磁盤,例如一次讀出n個字節就比每次讀出1個字節的訪問
效率要高很多。
b. 避免多次訪問操作系統。
c. 避免多次調用文件存取方法。
d. 避免將字節和字符混淆處理,在Java語言中字節與字符的概念是不一樣
的,在涉及到雙字節字符的問題上更是容易出錯。
7 如何獲得可用的硬盤空間?
目前尚未發現有任何干凈利落的純Java方法能夠解決這個問題。通常的解
決方案是直接訪問操作系統獲得這些信息。有一個被稱為JConfig的類庫提
供了一些方法可以獲得磁盤和文件信息,但是可以肯定這個類庫使用了JNI
方法。
下載地址:http://www.tolstoy.com/samizdat/jconfig.html
如果你使用的是暈倒死系列操作系統,那么下面的方法也許能夠獲得正確
的結果。我之所以說也許,是因為我在多個暈倒死平臺上作過實際測試,
在英文版的暈倒死上基本上都能夠得到正確的結果,在中文版的暈倒死上
基本上都不能夠獲得正確的結果。
?1?String?osname?=?System.getProperty("os.name"
);?
?2?
?3?String?command?=?""
;?
?4?
?5?if?(osname.indexOf("NT")?>?-1
)?
?6?
?7?command?=?"c:\\winnt\\System32\\cmd.exe"
;?
?8?
?9?else?if?(osname.indexOf("Windows")?>?-1
)?
10?
11?command?=?"c:\\windows\\command.com"
;?
12?
13?
14?
15?Process?p?=
?Runtime.getRuntime().exec(?
16?
17?command?+?"?/c?dir?>?c:\\dir.txt"
);?
18?
19?
p.waitFor();?
20?
然后你需要做的是對得到的dir.txt文件進行分析。
如果你使用的是UNIX/Linux操作系統,你可以使用類似的方法來獲得相關
信息。建議使用的命令是df -k > dir.txt。
8 我能夠用Java來格式化我的硬盤或者是軟盤么?
關于這個問題,想來在不久的將來仍然是不會有純Java的解決方案了。如
果你一定要在你的Java應用程序里面格式化你的C盤的話,下面的這個方法
也許會有所幫助。當然,在你使用這個方法之前,請仔細備份好女朋友給你
的情書或者是記下和下一個網友約會的日期。
建立一個稱為FormatDrive.bat的文件,該文件必須放在當前目錄或者是系
統路徑下,文件的內容如下:
rundll32.exe shell32.dll, SHFormatDrive
格式化硬盤的方法可以這樣寫:
?1?public?void
?FormatDrive()?
?2?
?3?
{?
?4?
?5?try
?
?6?
?7?
{?
?8?
?9?Process?p?=?Runtime.getRuntime().exec("FormatDrive.bat"
);?
10?
11?
p.waitfor();?
12?
13?}?catch
?(Exception?e)?
14?
15?
{?
16?
17?
System.out.println(e);?
18?
19?
}?
20?
21?
}?
22?
9 怎么知道我究竟有幾個可用的存儲設備?
在UNIX/Linux下你通常沒有必要關心這個問題,只要記住那個斜杠就可以了。
在暈倒死下硬盤可以有多個邏輯分區,可應用下面的方法找出來:
?1?public?void
?ListDisks()?
?2?
?3?
{?
?4?
?5?File[]?roots?=
?File.listRoots();?
?6?
?7?for?(int?i=0
;?i?
?8?
{?
?9?
10?
System.out.println(roots[i]);?
11?
12?
}?
13?
14?
}?
15?
本FAQ參考并引用或者是改寫了www.esus.com網站提供的部分內容,特此說
明。該網站是一個優秀的Java程序設計網站,值得各位朋友經常前去訪問。
摘自:
http://www.cn-java.com/target/news.php?news_id=992