2014-08-29 32 views
-1

我正在嘗試寫入&將整數數組RED []和BLUE []寫入文件。我試圖將它們轉換成字符串並寫入它們,希望它能夠工作,但沒有運氣。我在正確的軌道上嗎?我已經嘗試了DataOutputStreams,但是這對我來說還沒有解決。將整數/字符串數組寫入文件(Android應用程序開發)

截至目前,我確定有些事情是不正確的,因爲這兩個按鈕都沒有響應。該程序不通過try {}中的任何一個。

寫入到文件

bSave.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String FILENAME = name.getText().toString(); 

       try { 
        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
        BufferedWriter bw = new BufferedWriter(new FileWriter(FILENAME)); 
        bw.write(Arrays.toString(paletteview.RED)); 
        bw.write(Arrays.toString(paletteview.BLUE)); 
        fos.close(); 

       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }); 

從文件

listview.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       String data=null; 
       String FILENAME = savedarray[position]; 

       try { 
        String inputLine = null; 
        StringBuilder sb = null; 

        fis = openFileInput(FILENAME); 
        BufferedReader br = new BufferedReader(new FileReader(FILENAME)); 
        while ((inputLine = br.readLine()) != null) { 
         sb.append(br.readLine()); 
        } 
        fis.close(); 
        data=sb.toString(); 
        text.setText(data); 

       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     }); 

從文件讀取讀取:嘗試#2(由TextView的,看看有什麼我讀)

@Override 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
    String data=null; 
    String FILENAME = savedarray[position]; 
    File f = new File(FILENAME); 
    if (f.exists) { 
     textview.setText(FileManager.readFromFile(f)); 
    } 
} 

寫入文件:嘗試#2(用於intArrayToString方法,請參見下文)

@Override 
    public void onClick(View v) { 
     if (name.getText().toString() != null){ 
      FILENAME = name.getText().toString(); 
      File f = new File(FILENAME); 
      FileManager.writeToFile(f, intArrayToString(paletteview.RED)); 
     } 
    } 

intArrayToString(書寫用於文件#2)

String intArrayToString(int[] array) { 
    String text = "" + array[0]; 
    for (int i = 1; i < array.length; i++) { 
     text += ","+array[i]; 
    } 
    return text; 

*文件管理器(從NoInspiration的答案複製)

+0

什麼在你的logcat? – 2014-08-29 02:30:01

+0

簡而言之,'Arrays.toString()'方法不像你想象的那樣工作。嘗試Log.d(「debug」,Arrays.toString(paletteview.RED)'',你會看到。 – TactMayers 2014-08-29 02:38:32

+0

@ScaryWombat logcat中沒有任何內容 – user3923740 2014-08-29 02:48:09

回答

-1

你可以使用這個類來寫入和讀取文件中的字符串:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 

/** 
* The <b>FileManager</b> class is a static class used to save <b>File</b> from 
* <b>String</b> and load <b>File</b> as <b>String</b>. 
* 
* @version 1.0 
*/ 
public class FileManager { 

    /** 
    * Load a <b>File</b> as a <b>String</b>. 
    * 
    * @param file 
    *   The file to load 
    * @return The File as a String 
    */ 
    public static String readFromFile(final File file) { 
     String ret = ""; 

     try { 
      FileInputStream inputStream = new FileInputStream(file); 

      if (inputStream != null) { 
       InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
       BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
       String receiveString = ""; 
       StringBuilder stringBuilder = new StringBuilder(); 

       while ((receiveString = bufferedReader.readLine()) != null) { 
        stringBuilder.append(receiveString); 
       } 

       inputStream.close(); 
       ret = stringBuilder.toString(); 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return ret; 
    } 

    /** 
    * Write a <b>String</b> as a <b>File</b>. 
    * 
    * @param file 
    *   The File where the data will be written 
    * @param data 
    *   The data to write 
    */ 
    public static void writeToFile(final File file, final String data) { 
     new Thread() { 
      @Override 
      public void run() { 
       try { 
        FileOutputStream outputStream = new FileOutputStream(file); 
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
          outputStream); 
        outputStreamWriter.write(data); 
        outputStreamWriter.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }.run(); 
    } 

    /** 
    * Private constructor of <b>FileManager</b>. <i>Static class should not be 
    * instanced</i> 
    */ 
    private FileManager() { 
    } 
} 

你可以用這種方式:

FileManager.writeToFile(file, text); 
text = FileManager.readFromFile(file); 

對於intArray,你應該分析他們String改造他們:整型

數組爲String:

text = "" + intArray[0]; 
for (int i = 1; i < intArray.length(); i++) { 
    text += ","+intArray[i]; 
} 

String to Array of int:

String[] raw = text.split("[,]"); 
for (int i = 0; i < raw.length(); i++) { 
    intArray[i] = Integer.parseInt(raw[i]); 
} 
+0

更新了我的問題。正如你所說,現在這些按鈕是響應式的,但是,我添加了一個textview來查看我從文件中讀取的內容,但是它沒有顯示任何內容,當我點擊按鈕時,textview從默認文本更新爲無。 – user3923740 2014-08-29 03:25:38

+0

對於您的文件,將其更改爲: File file = new File(this.getFilesDir(),FILENAME); – NoInspiration 2014-08-29 04:54:17

+0

此外,在'readFromFile'之前放置一個條件:if(file.exists())'如果你想處理這個問題, – NoInspiration 2014-08-29 05:01:19

相關問題