激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java實(shí)現(xiàn)按行讀取大文件

Java實(shí)現(xiàn)按行讀取大文件

2019-12-17 13:37hebedich JAVA教程

這篇文章主要介紹了Java實(shí)現(xiàn)按行讀取大文件的方法的小結(jié),非常的簡(jiǎn)單實(shí)用,有需要的小伙伴尅參考下。

Java實(shí)現(xiàn)按行讀取大文件

?
1
2
3
4
5
6
7
8
9
String file = "F:" + File.separator + "a.txt";
FileInputStream fis = new FileInputStream(file);
RandomAccessFile raf = new RandomAccessFile(new File(file),"r");
String s ;
while((s =raf.readLine())!=null){
System.out.println(s);
}
raf.close();
fis.close();

網(wǎng)上流行的那個(gè)倆while版本不靠譜

可考慮bufferedinputstream和bufferedoutputstream來(lái)字節(jié)讀取,這個(gè)代碼太簡(jiǎn)單了,適用于非頻繁操作。或采用nio的FileChannel,比較適合于高并發(fā)操作,如下為filechannel的部分代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
File inFile = new File("D:\\error");
 File outFile = new File("D:\\to.txt");
 
 FileChannel inFileChannel = new FileInputStream(inFile).getChannel();
 FileChannel outFileChannel = new FileOutputStream(outFile).getChannel();
 
 ByteBuffer buffer = ByteBuffer.allocate(1024);
 while(-1 != inFileChannel.read(buffer)){
  buffer.flip();
  outFileChannel.write(buffer);
  buffer.clear();
 }
 outFileChannel.close();
 inFileChannel.close();

隨機(jī)讀取文件內(nèi)容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
public class ReadFromFile {
  /**
   * 以字節(jié)為單位讀取文件,常用于讀二進(jìn)制文件,如圖片、聲音、影像等文件。
   */
  public static void readFileByBytes(String fileName) {
    File file = new File(fileName);
    InputStream in = null;
    try {
      System.out.println("以字節(jié)為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
      // 一次讀一個(gè)字節(jié)
      in = new FileInputStream(file);
      int tempbyte;
      while ((tempbyte = in.read()) != -1) {
        System.out.write(tempbyte);
      }
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
      return;
    }
    try {
      System.out.println("以字節(jié)為單位讀取文件內(nèi)容,一次讀多個(gè)字節(jié):");
      // 一次讀多個(gè)字節(jié)
      byte[] tempbytes = new byte[100];
      int byteread = 0;
      in = new FileInputStream(fileName);
      ReadFromFile.showAvailableBytes(in);
      // 讀入多個(gè)字節(jié)到字節(jié)數(shù)組中,byteread為一次讀入的字節(jié)數(shù)
      while ((byteread = in.read(tempbytes)) != -1) {
        System.out.write(tempbytes, 0, byteread);
      }
    } catch (Exception e1) {
      e1.printStackTrace();
    } finally {
      if (in != null) {
        try {
          in.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 以字符為單位讀取文件,常用于讀文本,數(shù)字等類型的文件
   */
  public static void readFileByChars(String fileName) {
    File file = new File(fileName);
    Reader reader = null;
    try {
      System.out.println("以字符為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
      // 一次讀一個(gè)字符
      reader = new InputStreamReader(new FileInputStream(file));
      int tempchar;
      while ((tempchar = reader.read()) != -1) {
        // 對(duì)于windows下,\r\n這兩個(gè)字符在一起時(shí),表示一個(gè)換行。
        // 但如果這兩個(gè)字符分開(kāi)顯示時(shí),會(huì)換兩次行。
        // 因此,屏蔽掉\r,或者屏蔽\n。否則,將會(huì)多出很多空行。
        if (((char) tempchar) != '\r') {
          System.out.print((char) tempchar);
        }
      }
      reader.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    try {
      System.out.println("以字符為單位讀取文件內(nèi)容,一次讀多個(gè)字節(jié):");
      // 一次讀多個(gè)字符
      char[] tempchars = new char[30];
      int charread = 0;
      reader = new InputStreamReader(new FileInputStream(fileName));
      // 讀入多個(gè)字符到字符數(shù)組中,charread為一次讀取字符數(shù)
      while ((charread = reader.read(tempchars)) != -1) {
        // 同樣屏蔽掉\r不顯示
        if ((charread == tempchars.length)
            && (tempchars[tempchars.length - 1] != '\r')) {
          System.out.print(tempchars);
        } else {
          for (int i = 0; i < charread; i++) {
            if (tempchars[i] == '\r') {
              continue;
            } else {
              System.out.print(tempchars[i]);
            }
          }
        }
      }
 
    } catch (Exception e1) {
      e1.printStackTrace();
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 以行為單位讀取文件,常用于讀面向行的格式化文件
   */
  public static void readFileByLines(String fileName) {
    File file = new File(fileName);
    BufferedReader reader = null;
    try {
      System.out.println("以行為單位讀取文件內(nèi)容,一次讀一整行:");
      reader = new BufferedReader(new FileReader(file));
      String tempString = null;
      int line = 1;
      // 一次讀入一行,直到讀入null為文件結(jié)束
      while ((tempString = reader.readLine()) != null) {
        // 顯示行號(hào)
        System.out.println("line " + line + ": " + tempString);
        line++;
      }
      reader.close();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 隨機(jī)讀取文件內(nèi)容
   */
  public static void readFileByRandomAccess(String fileName) {
    RandomAccessFile randomFile = null;
    try {
      System.out.println("隨機(jī)讀取一段文件內(nèi)容:");
      // 打開(kāi)一個(gè)隨機(jī)訪問(wèn)文件流,按只讀方式
      randomFile = new RandomAccessFile(fileName, "r");
      // 文件長(zhǎng)度,字節(jié)數(shù)
      long fileLength = randomFile.length();
      // 讀文件的起始位置
      int beginIndex = (fileLength > 4) ? 4 : 0;
      // 將讀文件的開(kāi)始位置移到beginIndex位置。
      randomFile.seek(beginIndex);
      byte[] bytes = new byte[10];
      int byteread = 0;
      // 一次讀10個(gè)字節(jié),如果文件內(nèi)容不足10個(gè)字節(jié),則讀剩下的字節(jié)。
      // 將一次讀取的字節(jié)數(shù)賦給byteread
      while ((byteread = randomFile.read(bytes)) != -1) {
        System.out.write(bytes, 0, byteread);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (randomFile != null) {
        try {
          randomFile.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 顯示輸入流中還剩的字節(jié)數(shù)
   */
  private static void showAvailableBytes(InputStream in) {
    try {
      System.out.println("當(dāng)前字節(jié)輸入流中的字節(jié)數(shù)為:" + in.available());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    String fileName = "C:/temp/newTemp.txt";
    ReadFromFile.readFileByBytes(fileName);
    ReadFromFile.readFileByChars(fileName);
    ReadFromFile.readFileByLines(fileName);
    ReadFromFile.readFileByRandomAccess(fileName);
  }
}

將內(nèi)容追加到文件尾部

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class AppendToFile {
  /**
   * A方法追加文件:使用RandomAccessFile
   */
  public static void appendMethodA(String fileName, String content) {
    try {
      // 打開(kāi)一個(gè)隨機(jī)訪問(wèn)文件流,按讀寫(xiě)方式
      RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
      // 文件長(zhǎng)度,字節(jié)數(shù)
      long fileLength = randomFile.length();
      //將寫(xiě)文件指針移到文件尾。
      randomFile.seek(fileLength);
      randomFile.writeBytes(content);
      randomFile.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  /**
   * B方法追加文件:使用FileWriter
   */
  public static void appendMethodB(String fileName, String content) {
    try {
      //打開(kāi)一個(gè)寫(xiě)文件器,構(gòu)造函數(shù)中的第二個(gè)參數(shù)true表示以追加形式寫(xiě)文件
      FileWriter writer = new FileWriter(fileName, true);
      writer.write(content);
      writer.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    String fileName = "C:/temp/newTemp.txt";
    String content = "new append!";
    //按方法A追加文件
    AppendToFile.appendMethodA(fileName, content);
    AppendToFile.appendMethodA(fileName, "append end. \n");
    //顯示文件內(nèi)容
    ReadFromFile.readFileByLines(fileName);
    //按方法B追加文件
    AppendToFile.appendMethodB(fileName, content);
    AppendToFile.appendMethodB(fileName, "append end. \n");
    //顯示文件內(nèi)容
    ReadFromFile.readFileByLines(fileName);
  }
}

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

延伸 · 閱讀

精彩推薦
  • JAVA教程java中的十個(gè)大類總結(jié)

    java中的十個(gè)大類總結(jié)

    java.lang.string字符串類將是無(wú)可爭(zhēng)議的冠軍在任何一天的普及和不可以否認(rèn)。這是最后一個(gè)類,用來(lái)創(chuàng)建操作不可變字符串字面值 ...

    java之家4182019-10-17
  • JAVA教程Java冒泡排序(Bubble Sort)實(shí)例講解

    Java冒泡排序(Bubble Sort)實(shí)例講解

    冒泡排序的原理:假設(shè)要求的數(shù)組是正序,兩兩進(jìn)行比較,如果前一個(gè)書(shū)比后一個(gè)數(shù)小,位置不變。如果前一個(gè)數(shù)比后一個(gè)數(shù)大,位置互換,再跟后一個(gè)數(shù)...

    java開(kāi)發(fā)網(wǎng)2612019-10-21
  • JAVA教程Java中如何比較兩個(gè)數(shù)組中元素是否相同

    Java中如何比較兩個(gè)數(shù)組中元素是否相同

    比較兩個(gè)數(shù)組中的元素是否相同,在項(xiàng)目中經(jīng)常會(huì)使用到,下面與大家分享個(gè)最簡(jiǎn)單的方法 ...

    Java教程網(wǎng)1732019-11-23
  • JAVA教程詳解Java設(shè)計(jì)模式——迭代器模式

    詳解Java設(shè)計(jì)模式——迭代器模式

    這篇文章主要介紹了Java設(shè)計(jì)模式——迭代器模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面...

    No_Game_No_Life_1612019-06-22
  • JAVA教程MyEclipse到期破解代碼分享

    MyEclipse到期破解代碼分享

    前幾天有個(gè)小伙伴咨詢,使用的時(shí)候一直說(shuō)myeclipse已過(guò)期,需要購(gòu)買(mǎi),如何解決?可以去網(wǎng)上搜搜注冊(cè)碼,但作為程序猿這么做簡(jiǎn)直太無(wú)趣,看看我們自己來(lái)...

    hebedich2062019-12-04
  • JAVA教程java冒泡排序和選擇排序示例

    java冒泡排序和選擇排序示例

    這篇文章主要介紹了java冒泡排序和選擇排序示例,需要的朋友可以參考下 ...

    Java教程網(wǎng)3582019-11-22
  • JAVA教程struts2 中文亂碼的解決辦法分享

    struts2 中文亂碼的解決辦法分享

    這篇文章主要介紹了struts2 中文亂碼的解決辦法,需要的朋友可以參考下 ...

    java教程網(wǎng)1392019-11-06
  • JAVA教程java跟蹤執(zhí)行的sql語(yǔ)句示例分享

    java跟蹤執(zhí)行的sql語(yǔ)句示例分享

    這篇文章主要介紹了java跟蹤執(zhí)行的sql語(yǔ)句示例分享,需要的朋友可以參考下 ...

    java教程網(wǎng)2152019-11-16
主站蜘蛛池模板: 精国品产一区二区三区有限公司 | 国产午夜免费福利 | 国产高潮好爽好大受不了了 | 亚洲欧美国产高清va在线播放 | xxxxhdhdhdhd日本 | 免费男女乱淫真视频 | 国产精品一区在线看 | 国产精品高潮视频 | 欧美高清第一页 | 欧美在线观看视频一区 | 韩日黄色片 | 俄罗斯16一20sex牲色另类 | 97中文| 最新一区二区三区 | 久久久久久麻豆 | 日本一区二区三区四区高清视频 | 国产无区一区二区三麻豆 | 免费看成年人视频在线 | 欧美a v在线 | 99这里有精品| 福利免费观看 | 极品五月天 | 高清做爰免费无遮网站挡 | 网站毛片| 精品国产一二区 | 黄色av网站免费 | 久久精品视频在线免费观看 | 欧美黄色大片免费观看 | 日韩字幕在线观看 | www.91sese| 一区二区三区在线播放视频 | av免费入口 | 99久久久久久久久 | 黄污网站在线观看 | 精品99在线视频 | 国产精品免费久久久久 | 中文字幕在线亚洲精品 | 免费毛片随便看 | 成人在线视频在线观看 | 综合精品 | 午夜视频中文字幕 |