Android下的两个文件系统:proc和sys(三)

来源:互联网 发布:常用办公软件 编辑:程序博客网 时间:2024/05/22 11:55

看一下sys文件系统:

下面链接的这篇对这个文件系统的介绍还算比较详细

http://home.eeworld.com.cn/my/space-uid-67366-blogid-68596.html

因为我主要是对网络这一部分比较感兴趣,所以直接去看sys/class/net中的内容。


每一个网络接口都对应一个文件

我的有:ccmni0, ccmni1,lo,wlan0等

每个接口文件下,都有如下一些文件

statistics:记录该接口收(rx)发(tx)的包数目和字节数目,还有很多出错的包数目等等(不过大多是0)

power:目录里为空


附:转一篇别人写的读这些文件的代码点击打开链接



import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;
import org.apache.http.util.EncodingUtils;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;


/*  */


public class mService1 extends Service
{
private Handler objHandler = new Handler();
private int intCounter = 0;
private int mHour;
private int mMinute;
private int mYear;
private int mMonth;
private int mDay;
private String mdate;


final public String DEV_FILE = "/proc/self/net/dev";// 系统流量文件
String[] ethdata = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0" };
String[] gprsdata = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0" };
String[] wifidata = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0" };
String data = "0,0,0,0,0,0,0,0,0,0,0,0";// 对应on.txt里面的格式


final String ETHLINE = "  eth0";// eth是以太网信息 tiwlan0 是 Wifi rmnet0 是 GPRS
final String GPRSLINE = "rmnet0";
//转载时此处为tiwlan0, 但发现在我的2.1的手机上为wlan0
final String WIFILINE = " wlan0";
final String TEXT_ENCODING = "UTF-8";
final public String ONPATH = "/data/data/zy.dnh/on.txt";
final public String LOGPATH = "/data/data/zy.dnh/log.txt";


private Runnable mTasks = new Runnable()
{
public void run()// 运行该服务执行此函数
{
refresh();
intCounter++;
// DisplayToast("Counter:"+Integer.toString(intCounter));
objHandler.postDelayed(mTasks, 3000);// 每3000毫秒执行一次
}
};


@Override
public void onStart(Intent intent, int startId)
{
// TODO Auto-generated method stub
objHandler.postDelayed(mTasks, 0);
super.onStart(intent, startId);
}


@Override
public void onCreate()
{
// TODO Auto-generated method stub
super.onCreate();
}


@Override
public IBinder onBind(Intent intent)
{
// TODO Auto-generated method stub
return null;
}


@Override
public void onDestroy()
{
// TODO Auto-generated method stub
/*  */
objHandler.removeCallbacks(mTasks);
super.onDestroy();
}


public void DisplayToast(String str)
{
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}


public void readdev()
{
FileReader fstream = null;
try {
fstream = new FileReader(DEV_FILE);
}
catch (FileNotFoundException e) {
DisplayToast("Could not read " + DEV_FILE);
}


BufferedReader in = new BufferedReader(fstream, 500);
String line;
String[] segs;
String[] netdata;
int count = 0;
int k;
int j;
try {
while ((line = in.readLine()) != null) {
segs = line.trim().split(":");
if (line.startsWith(ETHLINE))
{
netdata = segs[1].trim().split(" ");
for (k = 0, j = 0; k < netdata.length; k++)
{
if (netdata[k].length() > 0)
{
ethdata[j] = netdata[k];
j++;
}
}
}
else if (line.startsWith(GPRSLINE))
{
netdata = segs[1].trim().split(" ");
for (k = 0, j = 0; k < netdata.length; k++)
{
if (netdata[k].length() > 0)
{
gprsdata[j] = netdata[k];
j++;
}
}
}
else if (line.startsWith(WIFILINE))
{
netdata = segs[1].trim().split(" ");
for (k = 0, j = 0; k < netdata.length; k++)
{
if (netdata[k].length() > 0)
{
wifidata[j] = netdata[k];
j++;
}
}
}
count++;
}


fstream.close();
}
catch (IOException e) {
DisplayToast(e.toString());
}


}


public String getinfo(String path)
{
File file;
String str = "";
FileInputStream in;
try {
// 打开文件file的InputStream
file = new File(path);
in = new FileInputStream(file);
// 将文件内容全部读入到byte数组
int length = (int) file.length();
byte[] temp = new byte[length];
in.read(temp, 0, length);
// 将byte数组用UTF-8编码并存入display字符串中
str = EncodingUtils.getString(temp, TEXT_ENCODING);
// 关闭文件file的InputStream
in.close();
}
catch (IOException e) {
DisplayToast(e.toString());
}


return str;
}


public void writefile(String str, String path)
{
File file;
FileOutputStream out;
try {
// 创建文件
file = new File(path);
file.createNewFile();
// 打开文件file的OutputStream
out = new FileOutputStream(file);
String infoToWrite = str;
// 将字符串转换成byte数组写入文件
out.write(infoToWrite.getBytes());
// 关闭文件file的OutputStream
out.close();
} catch (IOException e) {
// 将出错信息打印到Logcat
DisplayToast(e.toString());
}
}


public void refresh()
{
readdev();// 读取本次开机之后直到当前系统的总流量
data = ethdata[0] + "," + ethdata[1] + "," + ethdata[8] + ","
+ ethdata[9] + ","
+ gprsdata[0] + "," + gprsdata[1] + "," + gprsdata[8] + ","
+ gprsdata[9] + ","
+ wifidata[0] + "," + wifidata[1] + "," + wifidata[8] + ","
+ wifidata[9];


String onstr = getinfo(ONPATH);// 读取on.txt记录到onstr里
String ondata[] = onstr.split(",");// 将onstr各项分离 放到ondata里
// 计算增量


int[] delta = new int[12];
delta[0] = Integer.parseInt(ethdata[0]) - Integer.parseInt(ondata[0]);
delta[1] = Integer.parseInt(ethdata[1]) - Integer.parseInt(ondata[1]);
delta[2] = Integer.parseInt(ethdata[8]) - Integer.parseInt(ondata[2]);
delta[3] = Integer.parseInt(ethdata[9]) - Integer.parseInt(ondata[3]);
delta[4] = Integer.parseInt(gprsdata[0]) - Integer.parseInt(ondata[4]);
delta[5] = Integer.parseInt(gprsdata[1]) - Integer.parseInt(ondata[5]);
delta[6] = Integer.parseInt(gprsdata[8]) - Integer.parseInt(ondata[6]);
delta[7] = Integer.parseInt(gprsdata[9]) - Integer.parseInt(ondata[7]);
delta[8] = Integer.parseInt(wifidata[0]) - Integer.parseInt(ondata[8]);
delta[9] = Integer.parseInt(wifidata[1]) - Integer.parseInt(ondata[9]);
delta[10] = Integer.parseInt(wifidata[8])- Integer.parseInt(ondata[10]);
delta[11] = Integer.parseInt(wifidata[9])- Integer.parseInt(ondata[11]);


// 读取log.txt
// 获取当前时间
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR); // 获取当前年份
mMonth = c.get(Calendar.MONTH) + 1;// 获取当前月份
mDay = c.get(Calendar.DAY_OF_MONTH);// 获取当前月份的日期号码
mHour = c.get(Calendar.HOUR_OF_DAY);// 获取当前的小时数
mMinute = c.get(Calendar.MINUTE);// 获取当前的分钟数
mdate = mYear + "-" + mMonth + "-" + mDay;
String text = getinfo(LOGPATH);// 将log.txt的内容读到text字符串中
String[] line = text.split("/n");
String today = line[line.length - 1];// 获得今日已记录流量
String[] beToday = today.split(",");


// 检查文件最后一行是否为今天的流量记录信息
if (!beToday[0].equals(mdate))// 如果文件只有一行,表明目前日志为空,将当前日期加入
// 判断今日流量是否已经记录,如果今日流量没有记录
{
text = text + mdate + ",0,0,0,0,0,0,0,0,0,0,0,0/n";
writefile(text, LOGPATH);
line = text.split("/n");
today = line[line.length - 1];// 获得今日已记录流量
beToday = today.split(",");
}


int i;
// 处理今日流量
int[] newTodaydata = new int[12];// 表示今日流量
String newtoday = mdate;
for (i = 0; i <= 11; i++)
{
newTodaydata[i] = Integer.parseInt(beToday[i + 1]) + delta[i];
newtoday = newtoday + "," + newTodaydata[i];
}


newtoday = newtoday + "/n";
String[] beTotal = line[0].split(",");
int[] newTotaldata = new int[12];// 表示总流量数值
// 更新第一行
String newtotal = "total";
for (i = 0; i <= 11; i++)
{
newTotaldata[i] = Integer.parseInt(beTotal[i + 1]) + delta[i];// 总流量数值+delta[i]更新
newtotal = newtotal + "," + newTotaldata[i];
}


newtotal = newtotal + "/n";
// 处理中间不变的部分
String before = "";// before为之前的从第1行到昨天的流量记录
for (i = 1; i <= line.length - 2; i++)
before = before + line[i] + "/n";// 代表中间不变的部分


String newlog = newtotal + before + newtoday;
writefile(data, ONPATH);// 更新流量记录
writefile(newlog, LOGPATH);// 更新log*/
}
}

原创粉丝点击