2013-11-02 3 views
-1

Я хочу написать arraylist в файл. Но я не знаю, как это сделать. Может быть, вы можете мне помочь. Как сохранить его в файле? И хороший код до сих пор? Может быть, у вас достаточно времени, чтобы просмотреть это. Спасибо большое, 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

Почему вы хотите его сохранить? только для вашего приложения или для экспорта? use serialization –

ответ

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(); call out.close() также закрывает базовый FileOutputStream. – Sipka

2

В то время как вы можете буквально serializeArrayList, я действительно не думаю, что вы хотите сделать, , Я думаю, что имеет смысл хранить его содержимое в SQLLite, используя android.database.sqlite package, как описано 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.

Смежные вопросы