近期完成一个读取txt文本路由字段,动态加入到vpnService.Builder路由中功能。具体实现如下:
/**
* 返回路由名单 以String 数组形式
*
* @return
*/
public String[] initAssets() {
try {
//获取输入流
InputStream inputStream = getResources().getAssets().open("routelist.txt");//这里的名字是你的txt 文本文件名称,在App,main文件夹下建一个assets文件夹,放入txt文本。
//获取路由名单
String str = getString(inputStream);
//字符分割 每行,为一个ip、掩码
String[] arr = str.split("\n");
return arr;
} catch (IOException e1) {
e1.printStackTrace();
}
return null;
}
/**
* 获取文件内容
*
* @param inputStream
* @return
*/
public static String getString(InputStream inputStream) {
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
BufferedReader reader = new BufferedReader(inputStreamReader);
//创建字符缓冲流
StringBuffer sb = new StringBuffer("");
String line;
try {
//读取每行路由数据
while ((line = reader.readLine()) != null) {
//添加到字符缓冲流中
sb.append(line);
//一条一行
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
//返回路由字符串
return sb.toString();
}
// 往字符串数组追加新数据
private static String[] insert(String[] arr, String... str) {
int size = arr.length; // 获取原数组长度
int newSize = size + str.length; // 原数组长度加上追加的数据的总长度
// 新建临时字符串数组
String[] tmp = new String[newSize];
// 先遍历将原来的字符串数组数据添加到临时字符串数组
for (int i = 0; i < size; i++) {
tmp[i] = arr[i];
}
// 在末尾添加上需要追加的数据
for (int i = size; i < newSize; i++) {
tmp[i] = str[i - size];
}
return tmp; // 返回拼接完成的字符串数组
}
接收数据
// 处理txt内容
String[] list = initAssets();
String [] msg={};
for (int i = 0; i < list.length; i++) {
msg=insert(msg,list[i].split("/")[0]+"",list[i].split("/")[1]+"");
}
// Log.i("====txt单条数据","总数目:"+list.length+"msg"+msg.length+"");
.txt文本内容格式
1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/21
1.1.16.0/20
1.1.32.0/19
|