2013-11-02 103 views
-1

我想將數組列表寫入文件。但我不知道如何。 也許你可以幫助我。我如何將它保存到文件?到目前爲止,代碼是否好?也許你有足夠的時間來看看它。 非常感謝,Vinzenz如何保存Arraylist文件?

public class SongsManager { 

final String MEDIA_PATH = Environment.getExternalStorageDirectory() 
     .getPath() + "/"; 
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 
private String mp3Pattern = ".mp3"; 
private String mp4Pattern = ".mp4"; 
private String MP3Pattern = ".MP3"; 
private String MP4Pattern = ".MP4"; 

// Constructor 
public SongsManager() { 

} 

/** 
* Function to read all mp3 files and store the details in 
* ArrayList 
* */ 
public ArrayList<HashMap<String, String>> getPlayList() { 
    System.out.println(MEDIA_PATH); 
    if (MEDIA_PATH != null) { 
     File home = new File(MEDIA_PATH); 
     File[] listFiles = home.listFiles(); 
     if (listFiles != null && listFiles.length > 0) { 
      for (File file : listFiles) { 
       System.out.println(file.getAbsolutePath()); 
       if (file.isDirectory()) { 
        scanDirectory(file); 
       } else { 
        addSongToList(file); 
       } 
      } 
     } 
    } 
    // return songs list array 
    return songsList; 
} 

private void scanDirectory(File directory) { 
    if (directory != null) { 
     File[] listFiles = directory.listFiles(); 
     if (listFiles != null && listFiles.length > 0) { 
      for (File file : listFiles) { 
       if (file.isDirectory()) { 
        scanDirectory(file); 
       } else { 
        addSongToList(file); 
       } 

      } 
     } 
    } 
} 

private void addSongToList(File song) { 
    if (song.getName().endsWith(mp3Pattern) || song.getName().endsWith(mp4Pattern) || song.getName().endsWith(MP4Pattern) || song.getName().endsWith(MP3Pattern)) { 
     HashMap<String, String> songMap = new HashMap<String, String>(); 
     songMap.put("songTitle", 
       song.getName().substring(0, (song.getName().length() - 4))); 
     songMap.put("songPath", song.getPath()); 

     // Adding each song to SongList 
     songsList.add(songMap); 
    } 
} 
private void saveFiletoTXT() { 
    try{ 
     java.io.FileOutputStream fos = new java.io.FileOutputStream("/sdcard/"); 
     java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(fos); 

     oos.writeObject((java.util.ArrayList) songsList); 
     oos.flush(); 
     fos.close(); 
     } 
     catch(Exception e){} 
} 
} 
+0

你爲什麼要保存它?只是爲了您的應用程序或出口?使用序列化 –

回答

2

保存一個ArrayList或者任何對象可以像這樣

 try 
     { 
     FileOutputStream fileOut = 
     new FileOutputStream(filepath); 
     ObjectOutputStream out = new ObjectOutputStream(fileOut); 
     out.writeObject(arraylist); 
     out.close(); 
     fileOut.close(); 
     } 
     catch(IOException i) 
     { 
      i.printStackTrace(); 
     } 
+0

您不必調用fileOut.close();調用out.close()也會關閉底層的FileOutputStream。 – Sipka

2

做雖然你可以從字面上serializeArrayList,我真的不認爲你想這樣做。我認爲使用android.database.sqlite package將其內容存儲在SQLLite中更有意義,如here所述。

0

寫入或讀取文件中的一個ArrayList中可以這樣做:

public static void write(Context context, Object nameOfClass) { 
File directory = new File(context.getFilesDir().getAbsolutePath() 
     + File.separator + "serlization"); 
if (!directory.exists()) { 
    directory.mkdirs(); 
} 

String filename = "MessgeScreenList.srl"; 
ObjectOutput out = null; 

try { 
    out = new ObjectOutputStream(new FileOutputStream(directory 
      + File.separator + filename)); 
    out.writeObject(nameOfClass); 
    out.close(); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

}

你會得到答案here