android按行读取文件内容的几个方法
⼀、简单版
复制代码 代码如下:
import java.io.FileInputStream;void readFileOnLine(){
String strFileName = \"Filename.txt\";
FileInputStream fis = openFileInput(strFileName);StringBuffer sBuffer = new StringBuffer();
DataInputStream dataIO = new DataInputStream(fis);String strLine = null;
while((strLine = dataIO.readLine()) != null) { sBuffer.append(strLine + “\\n\");}
dataIO.close();fis.close();}
⼆、简洁版复制代码 代码如下:
//读取⽂本⽂件中的内容
public static String ReadTxtFile(String strFilePath) {
String path = strFilePath;
String content = \"\"; //⽂件内容字符串 //打开⽂件
File file = new File(path);
//如果path是传递过来的参数,可以做⼀个⾮⽬录的判断 if (file.isDirectory()) {
Log.d(\"TestFile\ } else {
try {
InputStream instream = new FileInputStream(file); if (instream != null) {
InputStreamReader inputreader = new InputStreamReader(instream); BufferedReader buffreader = new BufferedReader(inputreader); String line; //分⾏读取
while (( line = buffreader.readLine()) != null) { content += line + \"\\n\"; }
instream.close(); } }
catch (java.io.FileNotFoundException e) {
Log.d(\"TestFile\ }
catch (IOException e) {
Log.d(\"TestFile\ } }
return content; }
三、⽤于长时间使⽤的apk,并且有规律性的数据1,逐⾏读取⽂件内容复制代码 代码如下:
//⾸先定义⼀个数据类型,⽤于保存读取⽂件的内容 class WeightRecord { String timestamp; float weight;
public WeightRecord(String timestamp, float weight) { this.timestamp = timestamp; this.weight = weight; } }
//开始读取
private WeightRecord[] readLog() throws Exception {
ArrayList throw new Exception(\"external storage dir not found\"); //⾸先找到⽂件 File weightLogFile = new File(root,WeightService.LOGFILEPATH); if (!weightLogFile.exists()) throw new Exception(\"logfile '\"+weightLogFile+\"' not found\"); if (!weightLogFile.canRead()) throw new Exception(\"logfile '\"+weightLogFile+\"' not readable\"); long modtime = weightLogFile.lastModified(); if (modtime == lastRecordFileModtime) return lastLog; // file exists, is readable, and is recently modified -- reread it. lastRecordFileModtime = modtime; // 然后将⽂件转化成字节流读取 FileReader reader = new FileReader(weightLogFile); BufferedReader in = new BufferedReader(reader); long currentTime = -1; //逐⾏读取 String line = in.readLine(); while (line != null) { WeightRecord rec = parseLine(line); if (rec == null) Log.e(TAG, \"could not parse line: '\"+line+\"'\"); else if (Long.parseLong(rec.timestamp) < currentTime) Log.e(TAG, \"ignoring '\"+line+\"' since it's older than prev log line\"); else { Log.i(TAG,\"line=\"+rec); result.add(rec); currentTime = Long.parseLong(rec.timestamp); } line = in.readLine(); } in.close(); lastLog = (WeightRecord[]) result.toArray(new WeightRecord[result.size()]); return lastLog; } //解析每⼀⾏ private WeightRecord parseLine(String line) { if (line == null) return null; String[] split = line.split(\"[;]\"); if (split.length < 2) return null; if (split[0].equals(\"Date\")) return null; try { String timestamp =(split[0]); float weight = Float.parseFloat(split[1]) ; return new WeightRecord(timestamp,weight); } catch (Exception e) { Log.e(TAG,\"Invalid format in line '\"+line+\"'\"); return null; } } 2,保存为⽂件复制代码 代码如下: public boolean logWeight(Intent batteryChangeIntent) { Log.i(TAG, \"logBattery\"); if (batteryChangeIntent == null) return false; try { FileWriter out = null; if (mWeightLogFile != null) { try { out = new FileWriter(mWeightLogFile, true); } catch (Exception e) {} } if (out == null) { File root = Environment.getExternalStorageDirectory(); if (root == null) throw new Exception(\"external storage dir not found\"); mWeightLogFile = new File(root,WeightService.LOGFILEPATH); boolean fileExists = mWeightLogFile.exists(); if (!fileExists) { if(!mWeightLogFile.getParentFile().mkdirs()){ Toast.makeText(this, \"create file failed\ } mWeightLogFile.createNewFile(); } if (!mWeightLogFile.exists()) { Log.i(TAG, \"out = null\"); throw new Exception(\"creation of file '\"+mWeightLogFile.toString()+\"' failed\"); } if (!mWeightLogFile.canWrite()) throw new Exception(\"file '\"+mWeightLogFile.toString()+\"' is not writable\"); out = new FileWriter(mWeightLogFile, true); if (!fileExists) { String header = createHeadLine(); out.write(header); out.write('\\n'); } } Log.i(TAG, \"out != null\"); String extras = createBatteryInfoLine(batteryChangeIntent); out.write(extras); out.write('\\n'); out.flush(); out.close(); return true; } catch (Exception e) { Log.e(TAG,e.getMessage(),e); return false; } } 因篇幅问题不能全部显示,请点此查看更多更全内容