首先是一些背景:
我正在构建自己的音乐应用程序,该应用程序扫描整个操作系统中的所有音频文件,同一目录中的所有音频文件都有自己的播放列表。标准配置还有一个大的播放列表,其中包含操作系统上的所有音频文件。
这些数据不需要存储在任何地方,因为它是由操作系统默认完成的,哪些音频文件在哪个目录中,哪个路径等等。
(这个应用程序只为我自己设计,在我的pc上成功制作之后,我想学习android开发并为我的手机制作。)
我正在努力解决的问题是,用户还可以创建自己的播放列表,选择他们想要的任何歌曲。在创建播放列表并添加歌曲之后,当用户退出应用程序并稍后重新启动时,它自然不应被删除。我不想使用数据库,因为我将使用自己的应用程序,不想为它托管一个数据库。
我首先考虑将数据存储在.txt文件中,比如streamreader和writerforc。但我不认为这是最好的解决办法。
在我的应用程序中,歌曲是这样存储的。
public class Song() {
name (String);
path (String);
}
public class Artist {
name (String);
}
public class ArtistSong {
song (Object class: Song);
Artists (Arraylist class: Artist); //Songs can have multiple artists.
}
public class Playlist {
name (String);
songs (Arraylist class: ArtistSong);
}
从pc检索所有歌曲并创建1个主播放列表(所有音频文件)和每个存储音频文件的目录的播放列表时。我做了一个大的数组列表类型:艺术歌曲。包含所有歌曲。以及其他一些数组列表(对于每个目录的每个播放列表)。这些数组引用了包含所有歌曲的大数组列表。)
我不介意每次启动应用程序时检索每首歌曲(并为每个目录创建每个播放列表的ArrayList)的过程。
--现在当用户创建自己的播放列表时
//This is done dynamically. when the user clicks on create new playlist and selects songs for it.
ArrayList<ArtistSong> songsForPlaylist = new ArrayList<>();
String nameForPlaylist="playlist_1":
songsForPlaylist.add(song1);
songsForPlaylist.add(song2); // song1,2 reference to the 1big arraylist earlier created type: object of ArtistSong
Playlist play = new PlayList(songsForPlaylist,nameForPlayList);
因此,现在播放列表被创建,并存储在对象“play”中。只要应用程序正在运行,这就可以工作。
现在我需要存储的是:
->名为的音频文件的完整路径
->播放名(此名称是唯一的)。
艺术家和歌曲名,我可以从完整的路径和名称提取。
f、 e。
c:/users/niels/songs/artist1-歌曲1
c:/users/niels/songs/artist2-歌曲2
c:/users/niels/songs/artist3,artist4-song3
我想存储的地方是(存储的方式可能会有所不同,如果你能想到一个更有效的方法)
.txt file:
playlist1 #$# C:/users/niels/songs/artist1 - Song1<br>
playlist1 #$# C:/users/niels/songs/artist2 - Song2<br>
playlist2 #$# C:/users/niels/songs/artist3, artist4 - Song3<br>
这样,我在2个播放列表中存储了3首歌曲,我使用#$#作为分隔符。通过这样存储,我可以在启动应用程序时,在这个txt文件的基础上创建额外的播放列表。还有一个重要的注意事项,如果我这样做的话,txt文件的每一行将只包含1首具有唯一播放名的歌曲。应用程序必须每行读取一个.txt文件,就像c#。
在java中如何实现这样的功能?或者我应该这样储存?如果不是,还有什么更好的办法?
暂无答案!
目前还没有任何答案,快来回答吧!