<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    計算機學習積累

    ----轉載有理,轉載是想研究,想研究才會看,看了才會有感想,轉載后我有時會寫一些自己的感受
    數據加載中……

    Java的文件與磁盤操作(轉載)



    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

    posted on 2006-07-06 00:05 freebird 閱讀(599) 評論(0)  編輯  收藏 所屬分類: java

    主站蜘蛛池模板: 成人亚洲国产精品久久| 亚洲人成网站在线播放vr| 亚洲欧洲国产经精品香蕉网| 亚洲中文字幕无码久久精品1| 黄色免费网址大全| 亚洲av午夜成人片精品电影| 久久亚洲日韩看片无码| 免费网站看av片| 国产成人免费全部网站| 精品国产亚洲AV麻豆 | 国产亚洲Av综合人人澡精品| 中文在线观看国语高清免费| 超pen个人视频国产免费观看| 亚洲经典千人经典日产| 亚洲毛片在线免费观看| 亚洲人成影院77777| 永久免费av无码网站韩国毛片| 久久久久亚洲国产| 国产精品免费_区二区三区观看| 免费人成网站永久| 久久精品国产精品亚洲精品| 亚洲av午夜国产精品无码中文字| 1000部国产成人免费视频| 亚洲妓女综合网99| 看全色黄大色大片免费久久| 日韩在线视频线视频免费网站| 亚洲愉拍99热成人精品热久久 | 人体大胆做受免费视频| 浮力影院亚洲国产第一页| 国产亚洲欧美日韩亚洲中文色 | 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 2020因为爱你带字幕免费观看全集| 亚洲国产亚洲综合在线尤物| 国产做床爱无遮挡免费视频| 免费无码av片在线观看| 亚洲人成免费电影| 永久亚洲成a人片777777| 0588影视手机免费看片| 国产成人无码免费看片软件| 亚洲同性男gay网站在线观看| 免费乱码中文字幕网站|