如何在安卓/data(而不是/data/data)目錄下進行文件的讀寫操作,安卓data
分析:Android默認是無法直接操作/data目錄的,只能讀寫程序自己的私有目錄,也就是/data/data/package name/下,默認只能操作這個目錄下的文件,也就是我們想直接讀寫/data是做不到的。
但是只要我們修改了/data目錄下的目標文件的權限就可以進行操作了。
example:在/data/sibon/var目錄下創建一個dir.ip文件,將輸入的數據存儲到dir.ip文件中。
1,修改權限(目標文件夾)
initChmod("chmod 777 /data/sibon/var");
/**修改文件或文件夾的權限**/
private void initChmod(String command){
Process process = null;
DataOutputStream os = null;
try{
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutpputStream());
os.writeBytes(command + "\n");
os.writeBytes("exit\n");
os.flush();
}catch(Exception e){
}finally{
try{
if(os != null){
os.close();
}
process.destory();
}catch(Exception e){
}
}
}
2,進行寫文件操作
saveText("start saveText now......");
/**向dir.ip中寫入數據**/
private void saveText(String string){
File file = new File("/data/sibon/var/dir.ip");
BufferedWriter bw = null;
try{
//第二個參數的意義是說是否可以以append的方式添加數據
bw = new BufferedWriter(new FileWriter(file,false));
bw.write(string);
bw.flush();
System.out.println("寫入數據成功");
}catch(Exception e){
e.printStackTrace();
}
}
3,修改dir.ip的權限(讓其可讀可寫)
initChmod("chmod 666 /data/sibon/var/dir.ip");
4,(驗證是否可以讀取dir.ip中的數據)
readTxtFile(String filePath);
/**讀取txt文本數據(一行一行的讀取)**/
private static String readTxtFile(String strFilePath){
String path = strFilePath;
String context = "";//文本內容字符串
//打開文件
File file = new File(path);
//如果path是傳遞過來的參數,可以做一個非目錄的判斷
if(file.isDirectory()){
System.out.println("-----------------");
}
else {
try{
InputStream is = new FileInputStream(file);
if(is != null){
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
//分行讀取
while((line = buffreader.readLine()) != null){
content += line + "\n";
}
is.close();
}
}
catch (java.io.FileNotFoundException e)
{
System.out.println("The File doesn't not exist.");
}
catch (IOException e)
{
System.out.println(""+ e.getMessage());
}
}
return content;
}
}