首頁 > 網際網路

JAVA如何把HashMap內容輸出到文字檔案

2019-12-10 15:22:47

Java中無論是將什麼樣的資料寫入到文字檔案中,都需要使用IO流去操作,我們需要使用java.io包中的類去實現,其中最重要的五個類是File、OutputStream、InputStream、Writer、Reader,我們使用OutputStream、InputStream實現位元組的輸入和輸出操作,使用Writer、Reader去實現字元的輸入和輸出操作。這兩組類均為抽象類,可以根據使用場景的不同使用不同的實現類。

1

Java中我們使用流進行資料傳輸,就好像在資料源和目的之間建立了一條傳輸管道,我們可以想象一下就像水管一樣。IO流根據處理資料的型別不同分為字元流和位元組流,根據資料的流向不同可以分為輸入流和輸出流。IO流的分類可以參考下圖,我們將在接下來使用這裡面的類。


2

接下來我們建立一個TxtUtil工具類,來實現寫入文字檔案的方法。下面這個方法是將資料追加寫入到檔案檔案的末尾,我們可以看到該方法有兩個引數,List<String>就是我們要寫入的資料,因此不管是什麼格式的資料我們都需要轉成List<String>寫入,fileName是我們要寫入的檔案名,如果這個檔案不存在的話,下面的方法中new File(fileName)會幫我們建立。以下便是使用輸出了將資料寫入到檔案的程式碼,注意流在使用後一定要關閉。

/**   * 資料追加寫到檔案末尾   *   * @param dataList   * @param fileName   * @return   */public static void appendData2File(List<String> dataList, String fileName)  {      OutputStreamWriter out = null;      FileOutputStream fos = null;      try {          File file = new File(fileName);          if (!file.getParentFile().isDirectory()) {              file.getParentFile().mkdirs();          }          if (!file.exists()) {              file.createNewFile();          }        // 追加寫入檔案,且使用UTF-8格式          fos = new FileOutputStream(fileName, true);          out = new OutputStreamWriter(fos, "UTF-8");          for (int dataIndex = 0; dataIndex < dataList.size(); dataIndex++) {              out.write(dataList.get(dataIndex));              out.write("rn");          }      } catch (Exception e) {      } finally {          try {              if (null != out) {                  out.flush();                  out.close();                  fos.close();              }          } catch (IOException e) {          }      }  }  


3

我們在持續寫入文字檔案時也需要去判斷檔案的大小,如果檔案過大的話,即便檔案寫入成功,開啟也要等待很長時間,因此該方法還是很有必要的。

/**   * 根據java.nio.*的流獲取檔案大小   * @param file   */  public static long getFileSize(File file){      FileChannel fc = null;      try {          if(file.exists() && file.isFile()){              FileInputStream fis = new FileInputStream(file);              fc = fis.getChannel();              return fc.size();          }      } catch (Exception e) {          e.printStackTrace();      }finally{          if(null!=fc){              try {                  fc.close();              } catch (IOException e) {                  e.printStackTrace();              }          }      }      return 0;  }  


4

工具類已經寫完了,接下來便是如何將HashMap型別的資料寫入到文字檔案。我們建立一個Test類,在main方法中建立HashMap,並且放入一些測試資料,將HashMap中的資料轉成工具類中需要的List<String>型別,然後呼叫工具類中的方法將資料寫入檔案,最後列印檔案的大小。

public static void main(String[] args) {    Map<String, Object> map = new HashMap<>();    map.put("桃子", 10);    map.put("香蕉", 8);    map.put("西瓜", 6);    List<String> list = new ArrayList<>();    // 遍歷HashMap將資料轉為List<String>    for(Map.Entry<String, Object> entry : map.entrySet()) {        StringBuilder s = new StringBuilder();        s.append(entry.getKey())                .append(entry.getValue()).append("元");        list.add(s.toString());    }    // 將資料寫入到文字檔案    String fileName = "E:/test.txt";    TxtUtil.appendData2File(list, fileName);    long fileLength = TxtUtil.getFileSize(            new File(fileName));    System.out.println(fileLength);}


5

執行上面的測試類,我們可以看到在E槽生成了test.txt檔案,我們開啟該檔案可以看到資料已經成功寫入了,同時控制台也列印輸出了檔案的大小,如下圖所示。




IT145.com E-mail:sddin#qq.com