java8并行读取文件的简单介绍

博主:adminadmin 2022-12-04 07:09:06 70

今天给各位分享java8并行读取文件的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java中如何高效的读取大文件

读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:

Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path));

这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。

Java如何同时读取utf-8文本和GBK文本?

1,你可以在事先把文件编码转换一致。

过程跟2是一样的。

2,你可以动态转换

1),动态指定编码读取,什么格式的文本用什么格式的读取成string中。

这是必须的,如果这个时候读取就乱码了,那后面不管怎么样都是乱码。

InputStreamReader(InputStream in, Charset cs) 用这个来读文件,cs是文字编码。

2),然后使用默认编码输出。

java文件如何读取

java读取文件方法大全

一、多种方式读文件内容。

1、按字节读取文件内容

2、按字符读取文件内容

3、按行读取文件内容

4、随机读取文件内容

Java代码

1. import java.io.BufferedReader;

2. import java.io.File;

3. import java.io.FileInputStream;

4. import java.io.FileReader;

5. import java.io.IOException;

6. import java.io.InputStream;

7. import java.io.InputStreamReader;

8. import java.io.RandomAccessFile;

9. import java.io.Reader;

10.

11. public class ReadFromFile {

12. /**

13. * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。

14. *

15. * @param fileName

16. * 文件的名

17. */

18. public static void readFileByBytes(String fileName) {

19. File file = new File(fileName);

20. InputStream in = null;

21. try {

22. System.out.println("以字节为单位读取文件内容,一次读一个字节:");

23. // 一次读一个字节

24. in = new FileInputStream(file);

25. int tempbyte;

26. while ((tempbyte = in.read()) != -1) {

27. System.out.write(tempbyte);

28. }

29. in.close();

30. } catch (IOException e) {

31. e.printStackTrace();

32. return;

33. }

34. try {

35. System.out.println("以字节为单位读取文件内容,一次读多个字节:");

36. // 一次读多个字节

37. byte[] tempbytes = new byte[100];

38. int byteread = 0;

39. in = new FileInputStream(fileName);

40. ReadFromFile.showAvailableBytes(in);

41. // 读入多个字节到字节数组中,byteread为一次读入的字节数

42. while ((byteread = in.read(tempbytes)) != -1) {

43. System.out.write(tempbytes, 0, byteread);

44. }

45. } catch (Exception e1) {

46. e1.printStackTrace();

47. } finally {

48. if (in != null) {

49. try {

50. in.close();

51. } catch (IOException e1) {

52. }

53. }

54. }

55. }

56.

57. /**

58. * 以字符为单位读取文件,常用于读文本,数字等类型的文件

59. *

60. * @param fileName

61. * 文件名

62. */

63. public static void readFileByChars(String fileName) {

64. File file = new File(fileName);

65. Reader reader = null;

66. try {

67. System.out.println("以字符为单位读取文件内容,一次读一个字节:");

68. // 一次读一个字符

69. reader = new InputStreamReader(new FileInputStream(file));

70. int tempchar;

71. while ((tempchar = reader.read()) != -1) {

72. // 对于windows下,\r\n这两个字符在一起时,表示一个换行。

73. // 但如果这两个字符分开显示时,会换两次行。

74. // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。

75. if (((char) tempchar) != '\r') {

76. System.out.print((char) tempchar);

77. }

78. }

79. reader.close();

80. } catch (Exception e) {

81. e.printStackTrace();

82. }

83. try {

84. System.out.println("以字符为单位读取文件内容,一次读多个字节:");

85. // 一次读多个字符

86. char[] tempchars = new char[30];

87. int charread = 0;

88. reader = new InputStreamReader(new FileInputStream(fileName));

89. // 读入多个字符到字符数组中,charread为一次读取字符数

90. while ((charread = reader.read(tempchars)) != -1) {

91. // 同样屏蔽掉\r不显示

92. if ((charread == tempchars.length)

93. (tempchars[tempchars.length - 1] != '\r')) {

94. System.out.print(tempchars);

95. } else {

96. for (int i = 0; i charread; i++) {

97. if (tempchars[i] == '\r') {

98. continue;

99. } else {

100. System.out.print(tempchars[i]);

101. }

102. }

103. }

104. }

105.

106. } catch (Exception e1) {

107. e1.printStackTrace();

108. } finally {

109. if (reader != null) {

110. try {

111. reader.close();

112. } catch (IOException e1) {

113. }

114. }

115. }

116. }

117.

118. /**

119. * 以行为单位读取文件,常用于读面向行的格式化文件

120. *

121. * @param fileName

122. * 文件名

123. */

124. public static void readFileByLines(String fileName) {

125. File file = new File(fileName);

126. BufferedReader reader = null;

127. try {

128. System.out.println("以行为单位读取文件内容,一次读一整行:");

129. reader = new BufferedReader(new FileReader(file));

130. String tempString = null;

131. int line = 1;

132. // 一次读入一行,直到读入null为文件结束

133. while ((tempString = reader.readLine()) != null) {

134. // 显示行号

135. System.out.println("line " + line + ": " + tempString);

136. line++;

137. }

138. reader.close();

139. } catch (IOException e) {

140. e.printStackTrace();

141. } finally {

142. if (reader != null) {

143. try {

144. reader.close();

145. } catch (IOException e1) {

146. }

147. }

148. }

149. }

150.

151. /**

152. * 随机读取文件内容

153. *

154. * @param fileName

155. * 文件名

156. */

157. public static void readFileByRandomAccess(String fileName) {

158. RandomAccessFile randomFile = null;

159. try {

160. System.out.println("随机读取一段文件内容:");

161. // 打开一个随机访问文件流,按只读方式

162. randomFile = new RandomAccessFile(fileName, "r");

163. // 文件长度,字节数

164. long fileLength = randomFile.length();

165. // 读文件的起始位置

166. int beginIndex = (fileLength 4) ? 4 : 0;

167. // 将读文件的开始位置移到beginIndex位置。

168. randomFile.seek(beginIndex);

169. byte[] bytes = new byte[10];

170. int byteread = 0;

171. // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。

172. // 将一次读取的字节数赋给byteread

173. while ((byteread = randomFile.read(bytes)) != -1) {

174. System.out.write(bytes, 0, byteread);

175. }

176. } catch (IOException e) {

177. e.printStackTrace();

178. } finally {

179. if (randomFile != null) {

180. try {

181. randomFile.close();

182. } catch (IOException e1) {

183. }

184. }

185. }

186. }

187.

188. /**

189. * 显示输入流中还剩的字节数

190. *

191. * @param in

192. */

193. private static void showAvailableBytes(InputStream in) {

194. try {

195. System.out.println("当前字节输入流中的字节数为:" + in.available());

196. } catch (IOException e) {

197. e.printStackTrace();

198. }

199. }

200.

201. public static void main(String[] args) {

202. String fileName = "C:/temp/newTemp.txt";

203. ReadFromFile.readFileByBytes(fileName);

204. ReadFromFile.readFileByChars(fileName);

205. ReadFromFile.readFileByLines(fileName);

206. ReadFromFile.readFileByRandomAccess(fileName);

207. }

208. }

二、将内容追加到文件尾部

1. import java.io.FileWriter;

2. import java.io.IOException;

3. import java.io.RandomAccessFile;

4.

5. /**

6. * 将内容追加到文件尾部

7. */

8. public class AppendToFile {

9.

10. /**

11. * A方法追加文件:使用RandomAccessFile

12. * @param fileName 文件名

13. * @param content 追加的内容

14. */

15. public static void appendMethodA(String fileName, String content) {

16. try {

17. // 打开一个随机访问文件流,按读写方式

18. RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");

19. // 文件长度,字节数

20. long fileLength = randomFile.length();

21. //将写文件指针移到文件尾。

22. randomFile.seek(fileLength);

23. randomFile.writeBytes(content);

24. randomFile.close();

25. } catch (IOException e) {

26. e.printStackTrace();

27. }

28. }

29.

30. /**

31. * B方法追加文件:使用FileWriter

32. * @param fileName

33. * @param content

34. */

35. public static void appendMethodB(String fileName, String content) {

36. try {

37. //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件

38. FileWriter writer = new FileWriter(fileName, true);

39. writer.write(content);

40. writer.close();

41. } catch (IOException e) {

42. e.printStackTrace();

43. }

44. }

45.

46. public static void main(String[] args) {

47. String fileName = "C:/temp/newTemp.txt";

48. String content = "new append!";

49. //按方法A追加文件

50. AppendToFile.appendMethodA(fileName, content);

51. AppendToFile.appendMethodA(fileName, "append end. \n");

52. //显示文件内容

53. ReadFromFile.readFileByLines(fileName);

54. //按方法B追加文件

55. AppendToFile.appendMethodB(fileName, content);

56. AppendToFile.appendMethodB(fileName, "append end. \n");

57. //显示文件内容

58. ReadFromFile.readFileByLines(fileName);

59. }

60. }

Java读取文件问题

使用Java操作文本文件的方法详解

摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类

最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类,这两个类都是抽象类,Writer中 write(char[] ch,int off,int

length),flush()和close()方法为抽象方法,Reader中read(char[] ch,int off,int length)和close()方法是抽象方法。子类应该分别实现他们。 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader,它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。当使用FileReader读取文件的时候。FileReader fr = new FileReader("ming.txt");

int ch = 0;

while((ch = fr.read())!=-1 )

{

System.out.print((char)ch);

}

其中read()方法返回的是读取得下个字符。当然你也可以使用read(char[] ch,int off,int length)这和处理二进制文件的时候类似,不多说了。如果使用InputStreamReader来读取文件的时候while((ch = isr.read())!=-1)

{

System.out.print((char)ch);

}

这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。read()方法是比较好费时间的,如果为了提高效率我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用readLine()方法。BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));

String data = null;

while((data = br.readLine())!=null)

{

System.out.println(data);

}

当你明白了如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一点需要注意,当你写文件的时候,为了提高效率,写入的数据会先放入缓冲区,然后写入文件。因此有时候你需要主动调用flush()方法。与上面对应的写文件的方法为:

FileWriter fw = new FileWriter("hello.txt");

String s = "hello world";

fw.write(s,0,s.length());

fw.flush();OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt"));

osw.write(s,0,s.length());

osw.flush();PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true);

pw.println(s);

不要忘记用完后关闭流!下面是个小例子,帮助新手理解。其实有的时候java的IO系统是需要我们多记记的,不然哪天就生疏了。

import java.io.*;public class TestFile2

{

public static void main(String[] args) throws IOException

{

FileReader fr = new FileReader("ming.txt");

char[] buffer = new char[1024];

int ch = 0;

while((ch = fr.read())!=-1 )

{

System.out.print((char)ch);

} InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));

while((ch = isr.read())!=-1)

{

System.out.print((char)ch);

} BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));

String data = null;

while((data = br.readLine())!=null)

{

System.out.println(data);

} FileWriter fw = new FileWriter("hello.txt");

String s = "hello world";

fw.write(s,0,s.length());

fw.flush(); OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt"));

osw.write(s,0,s.length());

osw.flush(); PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true);

pw.println(s);

fr.close();

isr.close();

br.close();

fw.close();

osw.close();

pw.close();

}

}

java中多种方式读文件

一、多种方式读文件内容。

1、按字节读取文件内容

2、按字符读取文件内容

3、按行读取文件内容

4、随机读取文件内容

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.RandomAccessFile;

import java.io.Reader;

public class ReadFromFile {

/**

* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。

* @param fileName 文件的名

*/

public static void readFileByBytes(String fileName){

File file = new File(fileName);

InputStream in = null;

try {

System.out.println("以字节为单位读取文件内容,一次读一个字节:");

// 一次读一个字节

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("以字节为单位读取文件内容,一次读多个字节:");

//一次读多个字节

byte[] tempbytes = new byte[100];

int byteread = 0;

in = new FileInputStream(fileName);

ReadFromFile.showAvailableBytes(in);

//读入多个字节到字节数组中,byteread为一次读入的字节数

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) {

}

}

}

}

/**

* 以字符为单位读取文件,常用于读文本,数字等类型的文件

* @param fileName 文件名

*/

public static void readFileByChars(String fileName){

File file = new File(fileName);

Reader reader = null;

try {

System.out.println("以字符为单位读取文件内容,一次读一个字节:");

// 一次读一个字符

reader = new InputStreamReader(new FileInputStream(file));

int tempchar;

while ((tempchar = reader.read()) != -1){

//对于windows下,rn这两个字符在一起时,表示一个换行。

//但如果这两个字符分开显示时,会换两次行。

//因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。

if (((char)tempchar) != 'r'){

System.out.print((char)tempchar);

}

}

reader.close();

} catch (Exception e) {

e.printStackTrace();

}

try {

System.out.println("以字符为单位读取文件内容,一次读多个字节:");

//一次读多个字符

char[] tempchars = new char[30];

int charread = 0;

reader = new InputStreamReader(new FileInputStream(fileName));

//读入多个字符到字符数组中,charread为一次读取字符数

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; icharread; 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) {

}

}

}

}

/**

* 以行为单位读取文件,常用于读面向行的格式化文件

* @param fileName 文件名

*/

public static void readFileByLines(String fileName){

File file = new File(fileName);

BufferedReader reader = null;

try {

System.out.println("以行为单位读取文件内容,一次读一整行:");

reader = new BufferedReader(new FileReader(file));

String tempString = null;

int line = 1;

//一次读入一行,直到读入null为文件结束

while ((tempString = reader.readLine()) != null){

//显示行号

System.out.println("line " + line + ": " + tempString);

line++;

}

reader.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (reader != null){

try {

reader.close();

} catch (IOException e1) {

}

}

}

}

/**

* 随机读取文件内容

* @param fileName 文件名

*/

public static void readFileByRandomAccess(String fileName){

RandomAccessFile randomFile = null;

try {

System.out.println("随机读取一段文件内容:");

// 打开一个随机访问文件流,按只读方式

randomFile = new RandomAccessFile(fileName, "r");

// 文件长度,字节数

long fileLength = randomFile.length();

// 读文件的起始位置

int beginIndex = (fileLength 4) ? 4 : 0;

//将读文件的开始位置移到beginIndex位置。

randomFile.seek(beginIndex);

byte[] bytes = new byte[10];

int byteread = 0;

//一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。

//将一次读取的字节数赋给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) {

}

}

}

}

/**

* 显示输入流中还剩的字节数

* @param in

*/

private static void showAvailableBytes(InputStream in){

try {

System.out.println("当前字节输入流中的字节数为:" + 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);

}

}

二、将内容追加到文件尾部

import java.io.FileWriter;

import java.io.IOException;

import java.io.RandomAccessFile;

/**

* 将内容追加到文件尾部

*/

public class AppendToFile {

/**

* A方法追加文件:使用RandomAccessFile

* @param fileName 文件名

* @param content 追加的内容

*/

public static void appendMethodA(String fileName,

String content){

try {

// 打开一个随机访问文件流,按读写方式

RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");

// 文件长度,字节数

long fileLength = randomFile.length();

//将写文件指针移到文件尾。

randomFile.seek(fileLength);

randomFile.writeBytes(content);

randomFile.close();

} catch (IOException e){

e.printStackTrace();

}

}

/**

* B方法追加文件:使用FileWriter

* @param fileName

* @param content

*/

public static void appendMethodB(String fileName, String content){

try {

//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件

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");

//显示文件内容

ReadFromFile.readFileByLines(fileName);

//按方法B追加文件

AppendToFile.appendMethodB(fileName, content);

AppendToFile.appendMethodB(fileName, "append end. n");

//显示文件内容

ReadFromFile.readFileByLines(fileName);

}

}

java怎么读入文件,并逐行输出

java读入文件,并逐行输出,先在D://home建立个文件夹,然后创建一个a.txt文件,然后编辑文件,文本编辑的编码是utf-8,然后用流逐行读取输出,如下:

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

public class TestC {

public static void main(String[] args){

//获取要读取的文件

 File readFile=new File("D://home/a.txt");

 //输入IO流声明

        InputStream in=null;

        InputStreamReader ir=null;

        BufferedReader br=null;

        

        try {

         //用流读取文件

in=new BufferedInputStream(new FileInputStream(readFile));

//如果你文件已utf-8编码的就按这个编码来读取,不然又中文会读取到乱码

ir=new InputStreamReader(in,"utf-8");

//字符输入流中读取文本,这样可以一行一行读取

br= new BufferedReader(ir);

String line="";

//一行一行读取

while((line=br.readLine())!=null){

System.out.println(line);

}

        } catch (Exception e) {

e.printStackTrace();

}finally{

//一定要关闭流,倒序关闭

try {

if(br!=null){

br.close();

}

if(ir!=null){

ir.close();

}

if(in!=null){

in.close();

}

} catch (Exception e2) {

}

}

    

}

}

结果:

helloworld

您好

123456

关于java8并行读取文件和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-04,除非注明,否则均为首码项目网原创文章,转载请注明出处。