Java那些事之文件操作
今天简单介绍一下java中文件的读写操作。
读写文件是开发过程中最常见的技术了,虽然简单,但其中还是有很多细节需要注意的。比如写文件前要验证文件夹或文件是否存在,读写文件时编码格式的指定,以及读文件时以行为单位读取还是以字节为单位等等。
废话不多说,下面附上代码和注释,希望对大家有所帮助.
View Code
1 public ArrayList<String> ReadFileData(String fileName,ArrayList<String> strList) {
2 // TODO Auto-generated method stub
3 CheckMethods.PrintDebugMessage("-------开始处理文件:"+fileName+"-------");
4 File file = new File(fileName);
5 BufferedReader reader = null;
6 try {
7 CheckMethods.PrintDebugMessage("以行为单位读取文件内容,一次读一整行:");
8 reader = new BufferedReader(new FileReader(file));
9 String tempString = null;
10 int line = 0;
11
12 // 一次读入一行,直到读入null为文件结束
13 while ((tempString = reader.readLine()) != null) {
14 // 显示行号
15 line++;
16 CheckMethods.PrintDebugMessage("line " + line + ": " + tempString);
17 if(!tempString.equalsIgnoreCase(""))
18 strList.add(StringHelper.TrimString(tempString));
19 }
20 reader.close();
21 return strList;
22 }
23 catch (IOException e)
24 {
25 e.printStackTrace();
26 CheckMethods.PrintInfoMessage("读取配置文件:"+fileName+"出现错误");
27
28 }
29 return null;
30 }
2 // TODO Auto-generated method stub
3 CheckMethods.PrintDebugMessage("-------开始处理文件:"+fileName+"-------");
4 File file = new File(fileName);
5 BufferedReader reader = null;
6 try {
7 CheckMethods.PrintDebugMessage("以行为单位读取文件内容,一次读一整行:");
8 reader = new BufferedReader(new FileReader(file));
9 String tempString = null;
10 int line = 0;
11
12 // 一次读入一行,直到读入null为文件结束
13 while ((tempString = reader.readLine()) != null) {
14 // 显示行号
15 line++;
16 CheckMethods.PrintDebugMessage("line " + line + ": " + tempString);
17 if(!tempString.equalsIgnoreCase(""))
18 strList.add(StringHelper.TrimString(tempString));
19 }
20 reader.close();
21 return strList;
22 }
23 catch (IOException e)
24 {
25 e.printStackTrace();
26 CheckMethods.PrintInfoMessage("读取配置文件:"+fileName+"出现错误");
27
28 }
29 return null;
30 }
View Code
1 public String readDataFromFile(String fileName,String code)
2 {
3 CheckMethods.PrintDebugMessage("-------开始处理磁盘网页文件:"+fileName+"-------");
4 StringBuilder sb = new StringBuilder();
5 File file = new File(fileName);
6 if(!file.exists())
7 {
8
9 return "";
10 }
11 Reader reader = null;
12 try {
13 CheckMethods.PrintDebugMessage("以字符为单位读取文件内容,一次读一个字节:");
14 // 一次读一个字符
15 reader = new InputStreamReader(new FileInputStream(file),code);
16 int tempchar;
17 while ((tempchar = reader.read()) != -1) {
18 // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
19 // 但如果这两个字符分开显示时,会换两次行。
20 // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
21 if (((char) tempchar) != '\r') {
22 sb.append((char) tempchar);
23 }
24 }
25 reader.close();
26
27 return sb.toString();
28 } catch (Exception e) {
29 e.printStackTrace();
30
31 CheckMethods.PrintInfoMessage("读取文件:"+fileName+"出现错误");
32 }
33 return "";
34 }
2 {
3 CheckMethods.PrintDebugMessage("-------开始处理磁盘网页文件:"+fileName+"-------");
4 StringBuilder sb = new StringBuilder();
5 File file = new File(fileName);
6 if(!file.exists())
7 {
8
9 return "";
10 }
11 Reader reader = null;
12 try {
13 CheckMethods.PrintDebugMessage("以字符为单位读取文件内容,一次读一个字节:");
14 // 一次读一个字符
15 reader = new InputStreamReader(new FileInputStream(file),code);
16 int tempchar;
17 while ((tempchar = reader.read()) != -1) {
18 // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
19 // 但如果这两个字符分开显示时,会换两次行。
20 // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
21 if (((char) tempchar) != '\r') {
22 sb.append((char) tempchar);
23 }
24 }
25 reader.close();
26
27 return sb.toString();
28 } catch (Exception e) {
29 e.printStackTrace();
30
31 CheckMethods.PrintInfoMessage("读取文件:"+fileName+"出现错误");
32 }
33 return "";
34 }
View Code
1 public void writeDataToFile(String fileDic,String fileName,String content,String charSet) {
2 // TODO Auto-generated method stub
3 if(content.equalsIgnoreCase(""))
4 return;
5 File file = null;
6 try
7 {
8 //确保目录和文件存在,不存在则创建
9 File fileDiction = new File(fileDic);
10 if(!fileDiction.exists())
11 fileDiction.mkdirs();
12 file = new File(fileDic+fileName);
13 if(!file.exists())
14 file.createNewFile();
15 }
16 catch(Exception e)
17 {
18 CheckMethods.PrintInfoMessage(e.getMessage());
19 CheckMethods.PrintInfoMessage("创建文件:"+fileDic+fileName+"出现错误");
20
21 }
22
23 OutputStreamWriter write = null;
24 try {
25 //需要注意指定编码格式
26 write = new OutputStreamWriter(new FileOutputStream(file),charSet);
27 BufferedWriter writer = new BufferedWriter(write);
28 writer.write(content);
29 writer.close();
30 }
31 catch (IOException e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 CheckMethods.PrintInfoMessage("写入文件:"+fileDic+fileName+"出现错误");
35
36 }
37 }
2 // TODO Auto-generated method stub
3 if(content.equalsIgnoreCase(""))
4 return;
5 File file = null;
6 try
7 {
8 //确保目录和文件存在,不存在则创建
9 File fileDiction = new File(fileDic);
10 if(!fileDiction.exists())
11 fileDiction.mkdirs();
12 file = new File(fileDic+fileName);
13 if(!file.exists())
14 file.createNewFile();
15 }
16 catch(Exception e)
17 {
18 CheckMethods.PrintInfoMessage(e.getMessage());
19 CheckMethods.PrintInfoMessage("创建文件:"+fileDic+fileName+"出现错误");
20
21 }
22
23 OutputStreamWriter write = null;
24 try {
25 //需要注意指定编码格式
26 write = new OutputStreamWriter(new FileOutputStream(file),charSet);
27 BufferedWriter writer = new BufferedWriter(write);
28 writer.write(content);
29 writer.close();
30 }
31 catch (IOException e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 CheckMethods.PrintInfoMessage("写入文件:"+fileDic+fileName+"出现错误");
35
36 }
37 }
今天就到这里, 有什么不妥的地方,欢迎大家留言指正~