Java读取文件常用工具类
package org.pro.file.util; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * explain: ReadFile Class * translate: 读取文件类 * @author Muci 伤寒 * Copyright (C), ORG伤寒 * qq:1877378299 * mail:admin@baozoubook.com * tel:18616220047 */ public class ReadFile { private BufferedReader bufferedReader; /** * Read File Object */ public ReadFile() { } /** * Read File this file path * @param filePath * @throws FileNotFoundException */ public ReadFile(String filePath) throws FileNotFoundException{ this.bufferedReader = readFile(filePath); } /** * Read File * @param file * @throws FileNotFoundException */ public ReadFile(File file) throws FileNotFoundException{ this.bufferedReader = readFile(file); } /** * explain: ReadFile Function * translate: 读取文件的方法 * @param filePath 文件地址 * @return BufferedReader 缓冲读取对象 * @throws FileNotFoundException 文件找不到 */ public BufferedReader readFile(String filePath) throws FileNotFoundException{ //Read the file path to the file reader FileReader fileReader = new FileReader(filePath); //File reader into the buffer BufferedReader bufferedReader = new BufferedReader(fileReader); this.bufferedReader = bufferedReader; return bufferedReader; } /** * explain: ReadFile Function * translate: 读取文件的方法 * @param file 文件 * @return BufferedReader 缓冲读取对象 * @throws FileNotFoundException 文件找不到 */ public BufferedReader readFile(File file) throws FileNotFoundException{ //Read the file path to the file reader FileReader fileReader = new FileReader(file); //File reader into the buffer BufferedReader bufferedReader = new BufferedReader(fileReader); this.bufferedReader = bufferedReader; return bufferedReader; } /** * explain: To read the file content into a string * translate: 将文件内容读取成字符串 * @return BufferedReader 缓冲读取对象 */ public synchronized String toString(){ //create string buffer StringBuffer stringBuffer = new StringBuffer(); //is read file content line String line; try { if(bufferedReader!=null){ //cycle read this file to line add string buffer while((line=this.bufferedReader.readLine())!=null){ stringBuffer.append(line); } } } catch (IOException e) { e.printStackTrace(); } return stringBuffer.toString().length()>0?stringBuffer.toString():null; } /** * close buffered reader */ public synchronized void close(){ try { if(bufferedReader!=null){ this.bufferedReader.close(); } } catch (IOException e) { e.printStackTrace(); } } }
此工具类为读取普通文件类
下面则是该类的扩展类,读取ini文件,在开发语言中,ini配置文件其实是比较常用的,因为ini文件能直接被windows所识别,所以在通常很多C/S架构的软件中,都会有对应的ini文件。同时,ini文件对于C#、C++一类型的开发语言是很好识别的。
所以,在JNI开发环境下经常要读的不只是java的配置文件,还有对应的ini,xml等文件。
下列工具类对文件读取类进行扩展,用于读取ini配置文件
package org.pro.file; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import org.pro.file.util.ReadFile; /** * explain: Read ini file class * translate: 读取ini文件类 * @author Muci 伤寒 * Copyright (C), ORG伤寒 * qq:1877378299 * mail:admin@baozoubook.com * tel:18616220047 */ public class ReadIni extends ReadFile{ //buffered reader private BufferedReader bufferedReader; //content buffer map private HashMap<String,HashMap<String,String>> hashMap; /** * Read ini Object */ public ReadIni() { } /** * Read ini file path to content buffer map * @param filePath * @throws FileNotFoundException */ public ReadIni(String filePath) throws FileNotFoundException{ this.bufferedReader = readFile(filePath); try { contentToBuffer(); } catch (IOException e) { e.printStackTrace(); } } /** * Read ini file to content buffer map * @param filePath * @throws FileNotFoundException */ public ReadIni(File file) throws FileNotFoundException{ this.bufferedReader = readFile(file); try { contentToBuffer(); } catch (IOException e) { e.printStackTrace(); } } /** * explain: ReadFile Function * translate: 读取文件的方法 * @param filePath 文件地址 * @return BufferedReader 缓冲读取对象 * @throws FileNotFoundException 文件找不到 */ public BufferedReader readFile(String filePath) throws FileNotFoundException{ //Read the file path to the file reader FileReader fileReader = new FileReader(filePath); //File reader into the buffer BufferedReader bufferedReader = new BufferedReader(fileReader); this.bufferedReader = bufferedReader; try { contentToBuffer(); } catch (IOException e) { e.printStackTrace(); } return bufferedReader; } /** * explain: ReadFile Function * translate: 读取文件的方法 * @param file 文件 * @return BufferedReader 缓冲读取对象 * @throws FileNotFoundException 文件找不到 */ public BufferedReader readFile(File file) throws FileNotFoundException{ //Read the file path to the file reader FileReader fileReader = new FileReader(file); //File reader into the buffer BufferedReader bufferedReader = new BufferedReader(fileReader); this.bufferedReader = bufferedReader; try { contentToBuffer(); } catch (IOException e) { e.printStackTrace(); } return bufferedReader; } /** * explain: content read to the buffer map function * translate: 读取内容到缓冲区 * @throws IOException */ private void contentToBuffer() throws IOException{ //init content map buffer hashMap = new HashMap<String,HashMap<String,String>>(); //init key and value temporary buffer HashMap<String, String> keyValue = new HashMap<String, String>(); //is read file content line String line; //is line buffer temporary save String lineBuffer = null; //this area title String title = null; //is read file content line while((line = bufferedReader.readLine())!=null){ line = line.trim(); //this line is title if(line.matches("\\[.*\\]")){ //this is title not null but key value is have value if(null!=title && !title.isEmpty()){ //content map buffer add title and key value hashMap.put(title, keyValue); //init key value temporary buffer keyValue = new HashMap<String,String>(); //init line buffer temporary lineBuffer = null; } //get title temporary title = line.substring(line.indexOf("[")+1,line.indexOf("]")); }else if(line.matches(".*=.*")){ //This line is the content of the title if not the title just drop it if(null!=title && !title.isEmpty()){ //cutting line int i = line.indexOf("="); lineBuffer = line; //get the line key String key = line.substring(0,i); //get the line value String value = line.substring(i+1); //add this key value to keyValue buffer keyValue.put(key, value); } } } //if this title is not null and this line buffer is not null just this line have value if(null!=title && !title.isEmpty() && null!=lineBuffer && !lineBuffer.isEmpty()){ //get this line buffer the value int i = lineBuffer.indexOf("="); //get the line buffer key String key = lineBuffer.substring(0,i); //get the line buffer value String value = lineBuffer.substring(i+1); //add this buffer value to keyValue buffer keyValue.put(key, value); //add this title and keyValue buffer to content map buffer hashMap.put(title, keyValue); } } public HashMap<String, String> getTitle(String title) throws IOException{ return hashMap!=null?this.hashMap.get(title):null; } public void close(){ if (bufferedReader!=null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
相对于这扩展工具类,其实仅仅只是调用了其读文件的功能方法进行。
对于该读取ini配置文件类,ini配置文件是有多种格式的,该读取类读取的文件格式是
本文章其实算不上是文章,仅仅是对于这工具类的一个方案推广。对于文件读取,伤寒在此表示一直在进行对应研发及修改更新,以及对密文的读取等进行一系列研发。
在此也告知一些初学者,其实读写文件并不可怕,可怕的是在编码过程中如同一个无头苍蝇一般不知道从何下手。
本文由:OP-伤寒编写,如转发及复制请注明摘要地址http://blog.csdn.net/kevin_muqi
或 http://www.yoodb.com
如有疑问可加Q群248148860询问伤寒
版权声明:本文为博主原创文章,未经博主允许不得转载。