SMTH Java FAQ (3) 檔案與磁碟操作(菜鳥必看) (轉)
1 如何獲得某一個目錄下的列表?
File MyDir = new File("C://.");
String[] FileNames = MyDir.list();
2 如何實現一個開啟檔案或者是檔案對話方塊?
AWT: FileDialog類 + FilenameFilter類
: JFileChooser類 + FileFilter類
其中,基於Swing的解決方案功能更加強大,介面也更加美觀。
3 利用FileReader/FileOutputStream複製中文檔案出錯?
利用如下程式碼片斷複製中文檔案不會出錯:
int c;
while ((c = MyFileReader.read()) != -1)
MyFileWriter.write(c);
利用如下程式碼片斷複製中文檔案會導致檔案內容錯誤:
int c;
while ((c = MyFileReader.read()) != -1)
MyFileOutputStream.write(c);
造成這個問題的原因是:FileReader.read()返回一個int,其取值範圍是
0 到65535,通常來說是兩個位元組的;FileWriter.write(int c)向檔案寫
入一個int,通常來說也是兩個位元組的,如果某個字元的高位位元組為空,那
麼其高位位元組將被捨棄;FileOutputStream.write(int b)雖然接受一個
int作為引數,實際上只向檔案寫入一個位元組,如果傳遞過來的引數是一個
雙位元組的漢字,其高位位元組將被捨棄,造成檔案內容錯誤。
建議:永遠只使用InputStream/OutputStream進行IO操作。
利用如下程式碼片斷複製中文檔案不會出錯:
int c;
while ((c = MyFileInputStream.read()) != -1)
MyFileOutputStream.write(c);
4 如何顯示和儲存拉丁語言中的特殊字元
使用統一碼Unicode可以顯示和儲存拉丁語言中的特殊字元。具體應用範例
如下:
MyJTextArea.append("u00E1");
MyJTextArea.append("u00E2");
MyJTextArea.append("u00E3");
MyJTextArea.append("u00E4");
MyJTextArea.append("u00E5");
MyFileOutputStream.write(MyJTextArea.getText().getBytes("UTF-8"));
MyFileOutputStream.close();
同樣,在讀取檔案的時候也需要將讀到的內容轉換成統一碼。
byte[] b = new byte[MyFile.length()];
FileInputStream in = new FileInputStream(MyFile);
in.read(b);
MyJTextArea.append(new String(b, "UTF-8"));
5 如何利用檔案進行資料存取
對於一般的科學計算應用,DataInputStream和DataOutputStream類通
常是最好的選擇。這兩個類提供了存取各種資料的方法。下面的範例演示了
構造DataInputStream和DataOutputStream的方法:
MyDataInputStream = new DataInputStream(
new FileInputStream(MyInputFile));
MyDataOutputStream = new DataOutputStream(
new FileOutputStream(MyOutputFile));
利用InputStream和ObjectOutputStream同樣可以進行資料存取,需
要注意的是這樣做增加了的開銷,因為進行序列化過程新增了一
些額外的資訊。在利用ObjectInputStream和ObjectOutputStream進行通訊
的時候,雖然資料發收過程得到了大大簡化,但是對頻寬的要求也大大的
提高了。
6 檔案操作的基本原則是什麼?
a. 避免多次訪問,例如一次讀出n個位元組就比每次讀出1個位元組的訪問
要高很多。
b. 避免多次訪問操作。
c. 避免多次檔案存取方法。
d. 避免將位元組和字元混淆處理,在語言中位元組與字元的概念是不一樣
的,在涉及到雙位元組字元的問題上更是容易出錯。
7 如何獲得可用的硬碟空間?
目前尚未發現有任何干淨利落的純Java方法能夠解決這個問題。通常的解
決方案是直接訪問獲得這些資訊。有一個被稱為JConfig的類庫提
供了一些方法可以獲得磁碟和檔案資訊,但是可以肯定這個類庫使用了JNI
方法。
地址:
如果你使用的是暈倒死系列作業系統,那麼下面的方法也許能夠獲得正確
的結果。我之所以說也許,是因為我在多個暈倒死平臺上作過實際測試,
在英文版的暈倒死上基本上都能夠得到正確的結果,在中文版的暈倒死上
基本上都不能夠獲得正確的結果。
String osname = System.getProperty("os.name");
String command = "";
if (osname.indexOf("NT") > -1)
command = "c:winntSystem32cmd.exe";
else if (osname.indexOf("Windows") > -1)
command = "c:windowscommand.com";
Process p = Runtime.getRuntime().exec(
command + " /c dir > c:dir.txt");
p.waitFor();
然後你需要做的是對得到的dir.txt檔案進行分析。
如果你使用的是/作業系統,你可以使用類似的方法來獲得相關
資訊。建議使用的命令是df -k > dir.txt。
8 我能夠用Java來格式化我的硬碟或者是麼?
關於這個問題,想來在不久的將來仍然是不會有純Java的解決方案了。如
果你一定要在你的Java應用程式裡面格式化你的C盤的話,下面的這個方法
也許會有所幫助。當然,在你使用這個方法之前,請仔細好女朋友給你
的情書或者是記下和下一個網友約會的日期。
建立一個稱為FormatDrive.bat的檔案,該檔案必須放在當前目錄或者是系
統路徑下,檔案的內容如下:
rundll32.exe 32.dll, SHFormatDrive
格式化硬碟的方法可以這樣寫:
public void FormatDrive()
{
try
{
Process p = Runtime.getRuntime().exec("FormatDrive.bat");
p.waitfor();
} catch (Exception e)
{
System.out.println(e);
}
}
9 怎麼知道我究竟有幾個可用的儲存裝置?
在UNIX/Linux下你通常沒有必要關心這個問題,只要記住那個斜槓就可以了。
在暈倒死下硬碟可以有多個邏輯分割槽,可應用下面的方法找出來:
public void ListDisks()
{
File[] s = File.listRoots();
for (int i=0; i { System.out.println(roots[i]); } } 本FAQ參考並引用或者是改寫了網站提供的部分內容,特此說 明。該網站是一個優秀的Java網站,值得各位朋友經常前去訪問。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991170/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SMTH Java FAQ (2) 資料轉換(菜鳥必看) (轉)Java
- SMTH Java FAQ (1) 開發工具與開發環境(菜鳥必看) (轉)Java開發環境
- 標頭檔案與庫檔案與菜鳥 (轉)
- python菜鳥教程學習13:檔案操作Python
- 菜鳥必看IPC空連線的使用(轉載)
- 菜鳥必看:釋出駭客最初步的技術(轉)
- 檔案系統操作與磁碟管理
- 菜鳥學Java(十一)——GET與POSTJava
- java菜鳥入門Java
- 菜鳥調錯(四)——Spring與DWR整合,配置檔案報錯Spring
- 菜鳥必看的電腦音響常見故障與解決辦法
- 菜鳥初學Java的備忘錄(二) (轉)Java
- 菜鳥初學Java的備忘錄(五) (轉)Java
- 菜鳥初學Java的備忘錄(八) (轉)Java
- 菜鳥初學Java的備忘錄(七) (轉)Java
- 菜鳥初學Java的備忘錄(九) (轉)Java
- 菜鳥初學Java的備忘錄(四) (轉)Java
- 菜鳥初學Java的備忘錄(六) (轉)Java
- 菜鳥初學Java的備忘錄(十) (轉)Java
- 菜鳥初學Java的備忘錄(一) (轉)Java
- 菜鳥初學Java的備忘錄(三) (轉)Java
- 菜鳥學Java(八)——dom4j詳解之讀取XML檔案JavaXML
- 菜鳥學python之用python找指定檔案Python
- 菜鳥學SSH(五)——Struts2上傳檔案
- 菜鳥學Java(十七)——Jboss瘦身Java
- 菜鳥學Java(十八)——異常Java
- Java中對檔案的操作 (轉)Java
- 菜鳥也裝Linux(轉)Linux
- 菜鳥學習SQL注射(轉)SQL
- 【菜鳥學Java】3:封裝一個分頁類PageBeanJava封裝Bean
- Java程式設計師從笨鳥到菜鳥(五十二) 配置檔案實現將返回 POJO 類直接轉換成 json 物件Java程式設計師POJOJSON物件
- Win7旗艦版使用 菜鳥升級到高手必看Win7
- 菜鳥學Java(十六)——Jboss簡介Java
- 【菜鳥學Java】11:Session技術JavaSession
- 【菜鳥學Java】10:Cookie技術JavaCookie
- 【菜鳥學Java】4:Servlet 技術JavaServlet
- JAVA 操作檔案Java
- java 檔案操作Java