java文件如何读取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.
参考技术A 有几种方法读取吧
File file = new File("d:\\a.txt");//把D盘目录下的a.txt读取出来,
InputStream is = new FileInputStream(file);//把文件以字节流读到内存中
第二种是类加载
Demo1.class.getClassLoader().getResourceAsStream("a.txt");//Demo1为当前类名,a.txt在与Demo1.class在同一目录下。
还有其它的就不说了
参考技术B package sample;
import java.io.*;
public class CopyFileStream // copy one file to another file
public static void main(String args[])
FileInputStream fromFile=null;
FileOutputStream toFile=null;
try
//生成两个已有byte文件的 流对象。
fromFile=new FileInputStream(args[0]); // get file name from console
toFile=new FileOutputStream(args[1]); // get file name from console
catch (FileNotFoundException e)
System.err.println("File could not be found");
return; //缺文件名输入,抛异常,返回。
catch (IOException e)
System.err.println("File could not be copied ");
return;
catch (ArrayIndexOutOfBoundsException e)
System.err.println("Usage: CopyByteFile from-file to-file");
return;

try
fromFile.close(); // close InputStream
toFile.close(); // close OutputStream
catch (IOException e)
System.err.println("Error closing File.");



File类下的exists();方法是判断文件是否存在返回值是boolean

java如何读取XML配置文件

<?xml version="1.0" encoding="utf-8"?>
<appset>
<bao>test</bao>
<lei>class</lei>
<bianliang>a</bianliang>
</appset>
例如这样的一个简单XML的配置文件, 我想用java读取文件里的test,class,a应该如何读取呢,求详细代码!

  JAVA与XML文件,可以说是软件开发的“黄金搭档”,而如何使用JAVA完成对XML文件的读取,是我们首先要解决的问题。
  一、XML文件

  这个示例文件包括了用来打开ORACLE数据库的各种参数

  <?xml version="1.0" encoding="UTF-8"?>
<dbmsg>
<dbinfo>
<drivername>oracle.jdbc.driver.OracleDriver</drivername>
<sConnStr>jdbc:oracle:thin:@11.88.225.80:1521:VOUCHERDB</sConnStr>
<username>SYS AS SYSDBA</username>
<password>voucherdb</password>
</dbinfo>
</dbmsg>

  二、编写类名为ReadXml的类,用于解析XML文件

  我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的读取,通过查找有关资料,笔者编制了以下程序,用于读取文件名为filename的XML文件。

  package voucher.basic;

  import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

  import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

  import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class ReadXml
private String drivername;
private String sConnStr;
private String username;
private String password;

public String getDrivername()
return drivername;


  public String getSConnStr()
return sConnStr;


  public String getUsername()
return username;


  public String getPassword()
return password;

public void setDrivername(String drivername)
this.drivername = drivername;


  public void setSConnStr(String connStr)
sConnStr = connStr;


  public void setUsername(String username)
this.username = username;


  public void setPassword(String password)
this.password = password;


  public ReadXml(String fileName)
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
try
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
InputStream is=new FileInputStream(fileName);
Document doc=dombuilder.parse(is);
Element root=doc.getDocumentElement();
NodeList dbinfo=root.getChildNodes();
if(dbinfo!=null)
for(int i=0;i<dbinfo.getLength();i++)
Node db=dbinfo.item(i);
for(Node node=db.getFirstChild();node!=null;node=node.getNextSibling())
if(node.getNodeType()==Node.ELEMENT_NODE)
if(node.getNodeName().equals("drivername"))
setDrivername(node.getFirstChild().getNodeValue());

if(node.getNodeName().equals("sConnStr"))
setSConnStr(node.getFirstChild().getNodeValue());

if(node.getNodeName().equals("username"))
setUsername(node.getFirstChild().getNodeValue());

if(node.getNodeName().equals("password"))
setPassword(node.getFirstChild().getNodeValue());





catch (ParserConfigurationException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (SAXException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();




  

  

  这个以ReadXml命名的类,使用了参数为文件名的构造方法,用户只要将配置文件我名称传递给该方法,就可以完成对XML文件的解析,进而完成对相应参数数的读取。

  

  三、如何获取XML文件全路径并读取配置参数

  获取XML文件全路径的方法有两个,一是在servlet中获取,二是在单独的JAVA类中获取。

  1.在servlet中获取XML文件的全路径并读取配置参数

  程序片段String dirPath = getServletContext().getRealPath( "/WEB-INF");
String fileName = dirPath + "/conn.xml";
ReadXml xm = new ReadXml(fileName);
String DriverName = xm.getDrivername();
String connStr = xm.getSConnStr();
String user = xm.getUsername();
String pas = xm.getPassword();

  将这段程序添加到servlet中dopost()之后即可完成参数的读取

  2.在单独的JAVA类中获取全路径并读取配置参数

  程序片段

  

  String dirpath = System.getProperty("user.dir");
String xmlFile = dirpath + "/WebRoot/WEB-INF/conn.xml";
ReadXml rdxml = new ReadXml(xmlFile);
String driverName = rdxml.getDrivername();
String sConnStr = rdxml.getSConnStr();
String userName = rdxml.getUsername();
String passWord = rdxml.getPassword();

  

  注:配置文件conn.xml保存在webroot/WEB-INF目录中。
参考技术A java读取xml有4种方式:
1.dom
2.jdom
3.dom4j
4.sax
我给你看dom解析的代码吧
public class DOM
public static void main(String args[])
try
File f = new File("myfile.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName("appset");
for (int i = 0; i < nl.getLength(); i++)
System.out.println(doc.getElementsByTagName("bao").item(i).getFirstChild().getNodeValue());
System.out.println(doc.getElementsByTagName("lei").item(i).getFirstChild().getNodeValue());
System.out.println(doc.getElementsByTagName("bianliang").item(i).getFirstChild().getNodeValue());

catch (Exception e)
e.printStackTrace();




运行一下结果就出来了。本回答被提问者采纳
参考技术B /***
* 读取xml中存的字段名
*/
public static String getFiledsForXml(int index) throws Exception
DocumentBuilderFactory dbfactory;
DocumentBuilder domparser;
Document doc;
Element root = null;
try
dbfactory = DocumentBuilderFactory.newInstance();
domparser = dbfactory.newDocumentBuilder();

doc = domparser.parse(new File("FileUpload.xml"));
root = doc.getDocumentElement();
catch (Exception e)
e.printStackTrace();

if (root != null)
return root.getElementsByTagName("sql").item(index).getAttributes()
.getNamedItem("field").getNodeValue();
else
return "";

参考技术C 学一下jdom吧,很简单的,可以很方便的提取xml的值,网上很多相关教程(推荐张龙的xml培训视频) 参考技术D 你想用哪种方式读

以上是关于java文件如何读取的主要内容,如果未能解决你的问题,请参考以下文章

java如何读取整个excel文件的内容

Java 如何读取目录下的文件内容

java如何读取压缩包中的文本文件

java如何读取整个excel文件的内容

java 如何读取本地硬盘上面的zip文件. 返回ZipInputStream流!

java 如何读取PDF文件内容