第二十篇-如何写配置文件

配置文件不同的格式所用不同函数,可能可以优化

WriteData.java

package com.example.aimee.logtest;

import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public final class WriteData {
    private final String TAG = "WriteData";

    public void writeCfgValue(String file, String section, String variable, String value) throws IOException {

        String fileContent, allLine, newLine;
        String getValue = null;
        File file1 = new File(file);
        if (!file1.exists()) {
            file1.createNewFile();
        }
        String path_1 = file1.getParent();
        String fileNew = path_1 + "/" + "tmp.ini";
        File file_new = new File(fileNew);
        if (!file_new.exists()) {
            file_new.createNewFile();
        }
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        Boolean canAdd = false;
        Boolean canAdd1 = false;
        Boolean title = false;
        fileContent = "";
        Boolean tag=false;
        try {
            while ((allLine = bufferedReader.readLine()) != null) {
                Pattern p;
                Matcher m;
                p = Pattern.compile("\\[\\w+]");
                m = p.matcher(allLine);
                if (m.matches()) {
                    title = true;
                    canAdd = false;
                    canAdd1=false;
                    p = Pattern.compile("\\[" + section + "]");
                    m = p.matcher(allLine);
                    if (m.matches()) {
                        canAdd = true;
                        canAdd1=true;
                        title = false;
                        fileContent += allLine + "\r\n";
                    }
                }
                if (title && !canAdd) {
                    fileContent += allLine + "\r\n";
                }
                if (!title && canAdd) {
                    Pattern p1;
                    Matcher m1;
                    p1 = Pattern.compile(".*?=.*?");
                    m1 = p1.matcher(allLine);
                    if (m1.matches()) {
                        String[] strArray = allLine.split("=");
                        getValue = strArray[0].trim();
                        if (getValue.equalsIgnoreCase(variable)) {
                            newLine = getValue + "=" + value;
                            fileContent += newLine + "\r\n";
                            tag=true;
                            canAdd1=false;
                        }
                        else{
                            fileContent+=allLine+"\r\n";
                        }
                    }
                    else{
                        if(allLine.equals("")){
                            if(canAdd1){
                                newLine = variable + "=" + value;
                                fileContent+=newLine+"\r\n";
                            }
                            fileContent+=allLine+"\r\n";
                            tag=true;
                            canAdd1=false;
                        }
                    }
                }
            }
            if(fileContent.equals("")){
                fileContent="["+section+"]"+"\r\n";
                newLine = variable + "=" + value;
                fileContent+=newLine+"\r\n";
            }
            else{
                if(!canAdd&&!tag){
                    fileContent+="\r\n"+"["+section+"]"+"\r\n";
                    newLine = variable + "=" + value;
                    fileContent+=newLine+"\r\n";
                }
                if(canAdd1&&!tag){
                    newLine = variable + "=" + value;
                    fileContent+=newLine+"\r\n";
                }
            }
        }
        catch(IOException ex) {
            throw ex;
        }finally {
            bufferedReader.close();
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileNew, false));
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
        }
        file_new.renameTo(file1);

    }


    @RequiresApi(api = Build.VERSION_CODES.N)
    public void writeCfgValue(String file, String section, String testitem, String sublocation,
                                     String min, String max, String expvalue1, String expcalue2,
                                     String actvalue1, String actvalue2, String status, String failinfo, String errorcode) throws IOException {
        String fileContent, allLine, newLine;
        String getValue = null;
        String[] arr={testitem,sublocation,min,max,expvalue1,expcalue2,actvalue1,actvalue2,status,failinfo,errorcode};
        File file1 = new File(file);
        if (!file1.exists()) {
            file1.createNewFile();
        }
        String path_1 = file1.getParent();
        String fileNew = path_1 + "/" + "tmp.ini";
        File file_new = new File(fileNew);
        if (!file_new.exists()) {
            file_new.createNewFile();
        }
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        Boolean canAdd = false;
        Boolean canAdd1 = false;
        Boolean title = false;
        fileContent = "";
        Boolean tag=false;
        try {
            while ((allLine = bufferedReader.readLine()) != null) {
                Pattern p;
                Matcher m;
                p = Pattern.compile("\\[\\w+]");
                m = p.matcher(allLine);
                if (m.matches()) {
                    title = true;
                    canAdd = false;
                    canAdd1=false;
                    p = Pattern.compile("\\[" + section + "]");
                    m = p.matcher(allLine);
                    if (m.matches()) {
                        canAdd = true;
                        canAdd1=true;
                        title = false;
                        fileContent += allLine + "\r\n";
                    }
                }
                if (title && !canAdd) {
                    fileContent += allLine + "\r\n";
                }
                if (!title && canAdd) {
                    if (allLine.contains(",")) {
                        String[] strArray = allLine.split(",");
                        getValue = strArray[0].trim();
                        if (getValue.equalsIgnoreCase(testitem)) {
                            newLine= Arrays.stream(arr).collect(Collectors.joining(","));
                            fileContent += newLine + "\r\n";
                            tag=true;
                            canAdd1=false;
                        }
                        else{
                            fileContent+=allLine+"\r\n";
                        }
                    }
                    else{
                        if(allLine.equals("")){
                            if(canAdd1){
                                newLine= Arrays.stream(arr).collect(Collectors.joining(","));
                                fileContent+=newLine+"\r\n";
                            }
                            fileContent+=allLine+"\r\n";
                            tag=true;
                            canAdd1=false;
                        }
                    }
                }
            }
            if(fileContent.equals("")){
                fileContent="["+section+"]"+"\r\n";
                newLine= Arrays.stream(arr).collect(Collectors.joining(","));
                fileContent+=newLine+"\r\n";
            }
            else{
                if(!canAdd&&!tag){
                    fileContent+="\r\n"+"["+section+"]"+"\r\n";
                    newLine= Arrays.stream(arr).collect(Collectors.joining(","));
                    fileContent+=newLine+"\r\n";
                }
                if(canAdd1&&!tag){
                    newLine= Arrays.stream(arr).collect(Collectors.joining(","));
                    fileContent+=newLine+"\r\n";
                }
            }
        }
        catch(IOException ex) {
            throw ex;
        }finally {
            bufferedReader.close();
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileNew, false));
            Log.i(TAG, "fileContent: "+fileContent);
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
        }
        file_new.renameTo(file1);

    }

}
View Code

 

MainActivity.java

package com.example.aimee.logtest;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    String path_directory;
    String file_name;
    private final int REQUESTCODE=101;

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        path_directory = Environment.getExternalStorageDirectory().getAbsolutePath();
        path_directory=path_directory+"/"+"save";
        file_name = "test4.log";
        String path=path_directory+"/"+file_name;
        if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M){
            int checkSelfPermission=checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if(checkSelfPermission==PackageManager.PERMISSION_DENIED){
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUESTCODE);
            }
        }
        fileMethodSet fileMethodSet=new fileMethodSet();
        File file=new File(path);
        if(!file.exists()){
            try {
                fileMethodSet.create_file(path_directory,file_name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        WriteData writeData=new WriteData();
        try {
//            writeData.writeCfgValue(path,"HEAD1","NAME2","start5");
            writeData.writeCfgValue(path,"TESTITEM","cpu111","j08","1004","3004","","","1004","","PASS","","");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
        super.onRequestPermissionsResult(requestCode,permissions,grantResults);
        if(requestCode==REQUESTCODE){
            if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE) && grantResults[0]== PackageManager.PERMISSION_GRANTED){
                Toast.makeText(this,"ok",Toast.LENGTH_LONG).show();

            }else {
                Toast.makeText(this,"无权限",Toast.LENGTH_LONG).show();
            }
        }
    }
}
View Code

 

可以写入log文件,不过只限于等于和逗号两类。

 

简化版,使用不定长参数,可以实现模块的添加,修改,如果后续添加新的测试项目,提供不同参数,只需在后面添加相应参数条件函数,不需动以前的函数。

ConfigFileSet.java

package com.example.aimee.logtest;

import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public final class ConfigFileSet {
//    private final String TAG = "WriteData";
    private String newLine;
    private String fileContent, allLine;//定义待写入内容和读取的每一行的变量
    private String getValue = null;//定义每一行的第一个字符串
    private Boolean canAdd = false;
    private Boolean canAdd1 = false;
    Boolean title = false;
    private Boolean tag=false;

    @RequiresApi(api = Build.VERSION_CODES.N)
    public void writeCfgValue(String file, String section, String... values) throws IOException {
//        Log.i(TAG, "value_length: "+values.length);
        fileContent = "";

        newLine=getNewLine(values);//获取要添加或替换的字符串
        String fileNew=create_file(file);//获取文件的临时存放目录以及创建文件
        File file1=new File(file);//读取文件对象
        File file_new=new File(fileNew);//写入文件对象

        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        try {
            while ((allLine = bufferedReader.readLine()) != null) {
                fileContent=write_title(section);
                if (title && !canAdd) {
                    fileContent += allLine + "\r\n";
                }
                if (!title && canAdd) {
                    fileContent=write_replace_body(values);
                }
            }
            if(fileContent.equals("")){
                fileContent="["+section+"]"+"\r\n";
                fileContent+=newLine+"\r\n";
            }
            else{
                if(!canAdd&&!tag){
                    fileContent+="\r\n"+"["+section+"]"+"\r\n";
                    fileContent+=newLine+"\r\n";
                }
                if(canAdd1&&!tag){
                    fileContent+=newLine+"\r\n";
                }
            }
        }
        catch(IOException ex) {
            throw ex;
        }finally {
            bufferedReader.close();
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileNew, false));
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
        }
        file_new.renameTo(file1);

    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    private String getNewLine(String[] values){
        if(values.length==2){
            newLine = values[0] + "=" + values[1];
        }
        if(values.length==11){
            String[] arr=new String[11];
            for(int i=0;i<11;i++){
                arr[i]=values[i];
            }
            newLine=Arrays.stream(arr).collect(Collectors.joining(","));
        }
        return newLine;
    }

    private String create_file(String file) throws IOException {
        File file1 = new File(file);
        if (!file1.exists()) {
            file1.createNewFile();
        }
        String path_1 = file1.getParent();
        String fileNew = path_1 + "/" + "tmp.ini";
        File file_new = new File(fileNew);
        if (!file_new.exists()) {
            file_new.createNewFile();
        }
        return fileNew;
    }

    private String write_title(String section){
        Pattern p;
        Matcher m;
        p = Pattern.compile("\\[\\w+]");
        m = p.matcher(allLine);
        if (m.matches()) {
            title = true;
            canAdd = false;
            canAdd1=false;
            p = Pattern.compile("\\[" + section + "]");
            m = p.matcher(allLine);
            if (m.matches()) {
                canAdd = true;
                canAdd1=true;
                title = false;
                fileContent += allLine + "\r\n";
            }
        }
        return fileContent;
    }

    private String write_replace_body(String[] values){
        if(values.length==2) {
            Pattern p1;
            Matcher m1;
            p1 = Pattern.compile(".*?=.*?");
            m1 = p1.matcher(allLine);
            if (m1.matches()) {
                String[] strArray = allLine.split("=");
                getValue = strArray[0].trim();
                if (getValue.equalsIgnoreCase(values[0])) {
                    fileContent += newLine + "\r\n";
                    tag = true;
                    canAdd1 = false;
                } else {
                    fileContent += allLine + "\r\n";
                }
            } else {
                if (allLine.equals("")) {
                    if (canAdd1) {
                        fileContent += newLine + "\r\n";
                    }
                    fileContent += allLine + "\r\n";
                    tag = true;
                    canAdd1 = false;
                }
            }
        }
        if(values.length==11){
            if (allLine.contains(",")) {
                String[] strArray = allLine.split(",");
                getValue = strArray[0].trim();
                if (getValue.equalsIgnoreCase(values[0])) {
                    fileContent += newLine + "\r\n";
                    tag=true;
                    canAdd1=false;
                }
                else{
                    fileContent+=allLine+"\r\n";
                }
            }
            else{
                if(allLine.equals("")){
                    if(canAdd1){
                        fileContent+=newLine+"\r\n";
                    }
                    fileContent+=allLine+"\r\n";
                    tag=true;
                    canAdd1=false;
                }
            }
        }
        return fileContent;
    }
}
View Code

 

优点:模块化,易阅读,另,可以用Log.i进行debug,在LogCat下搜索类名找到相应log。

package com.example.aimee.logtest;

import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public final class ConfigFileSet {
//    private final String TAG = "WriteData";
    private String newLine;
    private String fileContent, allLine;//定义待写入内容和读取的每一行的变量
    private String getValue = null;//定义每一行的第一个字符串
    private Boolean canAdd = false;
    private Boolean canAdd1 = false;
    Boolean title = false;
    private Boolean tag=false;
    private Boolean tag1=true;

    @RequiresApi(api = Build.VERSION_CODES.N)
    public void writeCfgValue(String file, String section, String... values) throws IOException {
//        Log.i(TAG, "value_length: "+values.length);
        fileContent = "";

        newLine=getNewLine(values);//获取要添加或替换的字符串
        String fileNew=create_file(file);//获取文件的临时存放目录以及创建文件
        File file1=new File(file);//读取文件对象
        File file_new=new File(fileNew);//写入文件对象

        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        try {
            while ((allLine = bufferedReader.readLine()) != null) {
                fileContent=write_title(section);
                if (title && !canAdd) {
                    fileContent += allLine + "\r\n";
                }
                if (!title && canAdd) {
                    fileContent=write_replace_body(values);
                }
            }
            if(fileContent.equals("")){
                fileContent="["+section+"]"+"\r\n";
                fileContent+=newLine+"\r\n";
            }
            else{
                if(!canAdd&&!tag){
                    fileContent+="\r\n"+"["+section+"]"+"\r\n";
                    if(section=="TESTITEM"&&tag1){
                        String x="testitem, sublocation, min, max, expvalue1, expcalue2, actvalue1, actvalue2, status, failinfo, errorcode".toUpperCase();
                        fileContent+=x+"\r\n";
                        tag1=false;
                    }
                    fileContent+=newLine+"\r\n";
                }
                if(canAdd1&&!tag){
                    fileContent+=newLine+"\r\n";
                }
            }
        }
        catch(IOException ex) {
            throw ex;
        }finally {
            bufferedReader.close();
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileNew, false));
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
        }
        file_new.renameTo(file1);

    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    private String getNewLine(String[] values){
        if(values.length==2){
            newLine = values[0] + "=" + values[1];
        }
        if(values.length==11){
            String[] arr=new String[11];
            for(int i=0;i<11;i++){
                arr[i]=values[i];
            }
            newLine=Arrays.stream(arr).collect(Collectors.joining(","));
        }
        return newLine;
    }

    private String create_file(String file) throws IOException {
        File file1 = new File(file);
        if (!file1.exists()) {
            file1.createNewFile();
        }
        String path_1 = file1.getParent();
        String fileNew = path_1 + "/" + "tmp.ini";
        File file_new = new File(fileNew);
        if (!file_new.exists()) {
            file_new.createNewFile();
        }
        return fileNew;
    }

    private String write_title(String section){
        Pattern p;
        Matcher m;
        p = Pattern.compile("\\[\\w+]");
        m = p.matcher(allLine);
        if (m.matches()) {
            title = true;
            canAdd = false;
            canAdd1=false;
            p = Pattern.compile("\\[" + section + "]");
            m = p.matcher(allLine);
            if (m.matches()) {
                canAdd = true;
                canAdd1=true;
                title = false;
                fileContent += allLine + "\r\n";
            }
        }
        return fileContent;
    }

    private String write_replace_body(String[] values){
        if(values.length==2) {
            Pattern p1;
            Matcher m1;
            p1 = Pattern.compile(".*?=.*?");
            m1 = p1.matcher(allLine);
            if (m1.matches()) {
                String[] strArray = allLine.split("=");
                getValue = strArray[0].trim();
                if (getValue.equalsIgnoreCase(values[0])) {
                    fileContent += newLine + "\r\n";
                    tag = true;
                    canAdd1 = false;
                } else {
                    fileContent += allLine + "\r\n";
                }
            } else {
                if (allLine.equals("")) {
                    if (canAdd1) {
                        fileContent += newLine + "\r\n";
                    }
                    fileContent += allLine + "\r\n";
                    tag = true;
                    canAdd1 = false;
                }
            }
        }
        if(values.length==11){
            if (allLine.contains(",")) {
                String[] strArray = allLine.split(",");
                getValue = strArray[0].trim();
                if (getValue.equalsIgnoreCase(values[0])) {
                    fileContent += newLine + "\r\n";
                    tag=true;
                    canAdd1=false;
                }
                else{
                    fileContent+=allLine+"\r\n";
                }
            }
            else{
                if(allLine.equals("")){
                    if(canAdd1){
                        fileContent+=newLine+"\r\n";
                    }
                    fileContent+=allLine+"\r\n";
                    tag=true;
                    canAdd1=false;
                }
            }
        }
        return fileContent;
    }
}
View Code

 

posted @ 2018-10-31 14:13  o云淡风轻o  阅读(314)  评论(0编辑  收藏  举报