2013-03-04 244 views
-1

我想從我的應用程序內部創建文件夾。在文件夾內,我想創建一個文件(比如最近的文件),其中應用程序將在每次啓動時一行一行地寫入數據。將數據寫入文件

private void saveForRecents(String phoneNumber) { 
    //Need to open File and write the phonenumbers that has been passed into it 
    try{  
     File mydir = getDir("recents", 0); 

     //Creating an internal dir; 
     File fileWithinMyDir = new File(mydir, "recents"); 

     //Getting a file within the dir. 
     FileWriter fw = new FileWriter(fileWithinMyDir.getAbsoluteFile()); 


     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(phoneNumber); 
     bw.newLine(); 
     bw.flush(); 
     bw.close(); 

    }catch(Exception e){ 
     Toast.makeText(getApplicationContext(), "Failed to write into the file", Toast.LENGTH_LONG).show(); 
    } 
} 

如何訪問最近用過文件,它是我的目錄MYDIR裏面的內容是什麼?我想逐行訪問數據,因爲我在逐行寫入數據。我真的很感激,如果有人花時間來解釋我如何去做,因爲我需要學習它。請讓我知道如果我做錯了什麼。

+0

您正在使用'getApplicationContext()'當你不需要它。此外,您將'Context.MODE_APPEND'傳遞給'getDir()',它不是受支持的值 - 使用'0'。 – CommonsWare 2013-03-04 19:47:06

+0

我需要幫助。你能告訴我爲什麼我不需要getApplicationContext嗎?我的意思是說,爲什麼它沒有上下文就工作。 – nishantvodoo 2013-03-04 19:49:03

+0

這個方法也會寫在同一個文件裏面還是會覆蓋文件的內容?我需要做的是繼續在不同的行中寫入同一個文件。 – nishantvodoo 2013-03-04 20:19:35

回答

0

根據你在做什麼,我認爲使用SharedPreferences是一個更好的方法。它不會被其他人覆蓋,並且它隱藏在文件瀏覽器中的某個人身上。這裏有一個簡單的例子,假設你在某個數組中有最近的電話號碼。其他方法當然是可能的。

SharedPreferences Prefs = getSharedPreferences("RecentPhoneNumbers", MODE_PRIVATE); 
Editor e = Prefs.edit(); 
e.clear(); 

for (String s : RecentPhoneArray) 
{ 
    e.putString(s); 
} 
e.commit(); 

然後到下一次加載它們的應用程序啓動後或者需要重載:

SharedPreferences Prefs = getSharedPreferences("RecentPhoneNumbers", MODE_PRIVATE); 
for (Map.Entry<String, ?> entry : Prefs.getAll().entrySet()) 
{ 
    String s = entry.getValue().toString(); 
    RecentPhoneArray.add(s); 
} 
+0

您的回答包含不正確的信息。 SharedPreferences與應用程序專用目錄中包含的文件一樣「安全」,這是用戶提出問題的用途。沒有其他人可以「覆蓋」這些文件,也沒有人可以使用文件瀏覽器對它們進行捅破,除非電話是根植的 - 但在這種情況下,SharedPreferences也可以訪問。 – 323go 2013-03-04 20:21:56

+0

@ 323go你是對的,對不起。我不知何故誤讀,認爲OP正在創建一個目錄可訪問的任何地方\ sdcard – Paul 2013-03-04 22:27:58

+0

問題是,我必須創建兩個不同的文件夾,並在一個文件夾內寫入一組文件(每個文件也有一組數據寫在裏面)(在這個文件夾中每次創建一個新文件)。在另一個文件夾中,我必須創建一個包含數據的文件(在這個文件夾中,數據不斷被添加到原始文件中)。你能否建議我最好的方式來做到這一點,因爲我是一個完全新手,當談到編程。 – nishantvodoo 2013-03-04 23:53:59

0

後很長一段時間我想通了,我的問題的第二部分。如果遇到同樣的問題,這可能對其他用戶有用。

製作自定義目錄(這裏最近用過)和一個自定義文件(這裏最近

try 
{ 
     File mydir = getDir("recents", 0); 
     File fileWithinMyDir = new File(mydir, "recent"); 
     //true here lets the data to be added in the same file in the next line 
     // No value at all or a false will overwrite the file 
     FileWriter fw = new FileWriter(fileWithinMyDir.getAbsoluteFile(), true); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write("Anything you want to write"); 
     bw.newLine(); 
     bw.flush(); 

    bw.close(); 

    }catch(Exception e){ 

    Toast.makeText(getApplicationContext(), "Failed to write into the file", Toast.LENGTH_LONG).show(); 
} 

下面的代碼有助於讀取相同的文件(這裏最近)內的同目錄(這裏最近用過

try 
{ 

    File mydir = this.getDir("recents", 0); 
    File fileWithinMyDir = new File(mydir, "recent"); 
    try 
    { 
    // open the file for reading 
    InputStream instream = new FileInputStream(fileWithinMyDir); 


    if (instream != null) 
    { 
     // prepare the file for reading 
     InputStreamReader inputreader = new InputStreamReader(instream); 
     BufferedReader buffreader = new BufferedReader(inputreader); 

     String line; 

     while ((line = buffreader.readLine())!= null) 
     { 

     // do something with the line 

     } 

     instream.close(); 
    } 
    } 
    catch (Exception ex) 
    { 
    // print stack trace. 
    } 
    finally 
    { 
    // close the file. 

    } 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 

需要注意的一個重要的事情是我F A目錄最近用過這裏和文件裏面最近這裏不存在,那麼它會自動在第一次運行產生。從第二輪就開始引用它,而不是再重新創建整個事情...

希望這將幫助一些用戶