乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java的文件與磁盤操作

       Joshua 2006-01-14
      1 如何獲得某一個目錄下的文件列表?



      File MyDir = new File("C:/Windows/.");

      String[] FileNames = MyDir.list();



      2 如何實現(xiàn)一個打開文件或者是存儲文件對話框?



      AWT: FileDialog類 + FilenameFilter類

      Swing: JFileChooser類 + FileFilter類



      其中,基于Swing的解決方案功能更加強大,界面也更加美觀。



      3 利用FileReader/FileOutputStream拷貝中文文件出錯?



      利用如下代碼片斷拷貝中文文件不會出錯:



      int c;

      while ((c = MyFileReader.read()) != -1)

      MyFileWriter.write(c);



      利用如下代碼片斷拷貝中文文件會導致文件內(nèi)容錯誤:



      int c;

      while ((c = MyFileReader.read()) != -1)

      MyFileOutputStream.write(c);



      造成這個問題的原因是:FileReader.read()返回一個int,其取值范圍是

      0 到65535,通常來說是兩個字節(jié)的;FileWriter.write(int c)向文件寫

      入一個int,通常來說也是兩個字節(jié)的,如果某個字符的高位字節(jié)為空,那

      么其高位字節(jié)將被舍棄;FileOutputStream.write(int b)雖然接受一個

      int作為參數(shù),實際上只向文件寫入一個字節(jié),如果傳遞過來的參數(shù)是一個

      雙字節(jié)的漢字,其高位字節(jié)將被舍棄,造成文件內(nèi)容錯誤。



      建議:永遠只使用InputStream/OutputStream進行IO操作。



      利用如下代碼片斷拷貝中文文件不會出錯:



      int c;

      while ((c = MyFileInputStream.read()) != -1)

      MyFileOutputStream.write(c);



      4 如何顯示和存儲拉丁語言中的特殊字符



      使用統(tǒng)一碼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();



      同樣,在讀取文件的時候也需要將讀到的內(nèi)容轉(zhuǎn)換成統(tǒng)一碼。



      byte[] b = new byte[MyFile.length()];

      FileInputStream in = new FileInputStream(MyFile);

      in.read(b);

      MyJTextArea.append(new String(b, "UTF-8"));



      5 如何利用文件進行數(shù)據(jù)存取



      對于一般的科學計算應用程序,DataInputStream和DataOutputStream類通

      常是最好的選擇。這兩個類提供了存取各種數(shù)據(jù)的方法。下面的范例演示了

      構(gòu)造DataInputStream和DataOutputStream的方法:



      MyDataInputStream = new DataInputStream(

      new FileInputStream(MyInputFile));

      MyDataOutputStream = new DataOutputStream(

      new FileOutputStream(MyOutputFile));



      利用ObjectInputStream和ObjectOutputStream同樣可以進行數(shù)據(jù)存取,需

      要注意的是這樣做增加了硬盤的開銷,因為進行對象序列化過程添加了一

      些額外的信息。在利用ObjectInputStream和ObjectOutputStream進行通訊

      的時候,雖然數(shù)據(jù)發(fā)收過程得到了大大簡化,但是對帶寬的要求也大大的

      提高了。



      6 文件操作的基本原則是什么?



      a. 避免多次訪問磁盤,例如一次讀出n個字節(jié)就比每次讀出1個字節(jié)的訪問

      效率要高很多。

      b. 避免多次訪問操作系統(tǒng)。

      c. 避免多次調(diào)用文件存取方法。

      d. 避免將字節(jié)和字符混淆處理,在Java語言中字節(jié)與字符的概念是不一樣

      的,在涉及到雙字節(jié)字符的問題上更是容易出錯。



      7 如何獲得可用的硬盤空間?



      目前尚未發(fā)現(xiàn)有任何干凈利落的純Java方法能夠解決這個問題。通常的解

      決方案是直接訪問操作系統(tǒng)獲得這些信息。有一個被稱為JConfig的類庫提

      供了一些方法可以獲得磁盤和文件信息,但是可以肯定這個類庫使用了JNI

      方法。



      下載地址:http://www./samizdat/jconfig.html



      如果你使用的是暈倒死系列操作系統(tǒng),那么下面的方法也許能夠獲得正確

      的結(jié)果。我之所以說也許,是因為我在多個暈倒死平臺上作過實際測試,

      在英文版的暈倒死上基本上都能夠得到正確的結(jié)果,在中文版的暈倒死上

      基本上都不能夠獲得正確的結(jié)果。



      String osname = System.getProperty("os.name");

      String command = "";

      if (osname.indexOf("NT") > -1)

      command = "c:\\winnt\\System32\\cmd.exe";

      else if (osname.indexOf("Windows") > -1)

      command = "c:\\windows\\command.com";



      Process p = Runtime.getRuntime().exec(

      command + " /c dir > c:\\dir.txt");

      p.waitFor();



      然后你需要做的是對得到的dir.txt文件進行分析。



      如果你使用的是UNIX/Linux操作系統(tǒng),你可以使用類似的方法來獲得相關

      信息。建議使用的命令是df -k > dir.txt。



      8 我能夠用Java來格式化我的硬盤或者是軟盤么?



      關于這個問題,想來在不久的將來仍然是不會有純Java的解決方案了。如

      果你一定要在你的Java應用程序里面格式化你的C盤的話,下面的這個方法

      也許會有所幫助。當然,在你使用這個方法之前,請仔細備份好女朋友給你

      的情書或者是記下和下一個網(wǎng)友約會的日期。



      建立一個稱為FormatDrive.bat的文件,該文件必須放在當前目錄或者是系

      統(tǒng)路徑下,文件的內(nèi)容如下:



      rundll32.exe shell32.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下你通常沒有必要關心這個問題,只要記住那個斜杠就可以了。

      在暈倒死下硬盤可以有多個邏輯分區(qū),可應用下面的方法找出來:



      public void ListDisks()

      {

      File[] roots = File.listRoots();

      for (int i=0; i
      {

      System.out.println(roots[i]);

      }

      }





      本FAQ參考并引用或者是改寫了www.esus.com網(wǎng)站提供的部分內(nèi)容,特此說

      明。該網(wǎng)站是一個優(yōu)秀的Java程序設計網(wǎng)站,值得各位朋友經(jīng)常前去訪問

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多