[英]How to read certain files from raw folder?
我創建了一個簡單的活動來播放存儲在原始文件夾中的音樂列表,但我想創建另一個活動,例如MainActivity
- 2008 年的歌曲,其他活動 1 - 2009 年的歌曲,其他活動 2 - 2010 年的歌曲等.那么我如何只從原始文件夾中讀取某些文件或者是否可以創建子目錄或從其他新文件夾中讀取?
以下是我到目前為止所做的代碼:
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.lang.reflect.Field;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ListView musicListView;
ArrayList<String> arrayList;
ArrayAdapter musicAdapter;
MediaPlayer musicplayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
musicListView = findViewById(R.id.musicListView);
arrayList = new ArrayList<String>();
Field[] fields = R.raw.class.getFields();
for (int i= i=0; i<fields.length; i++) {
arrayList.add(fields[i].getName());
}
musicAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
musicListView.setAdapter(musicAdapter);
musicListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (musicplayer != null) {
musicplayer.release();
}
int resId = getResources().getIdentifier(arrayList.get(i), "raw", getPackageName());
musicplayer = MediaPlayer.create(MainActivity.this, resId);
musicplayer.start();
}
});
}
}
問題 A:修復:當您在 /resources 文件夾或 raw 文件夾(類似)中創建所有音頻文件時,創建名稱為 2008 的音頻文件並附加一些字符串和當前時間戳。 因此,2008 年的所有文件都將在 /resources 文件夾中包含字符串“2008”。 因此,要檢索解析字符串並檢索包含字符串“2008”的音頻文件,同樣適用於 2009 年和 2010 年。 從 Raw 文件夾中讀取文件:修復:在 java 中使用 resources.getBundle() 或在默認目錄(即 src/resources 文件夾並使用庫 InputStream 或 FileInputStream)中創建具有屬性類的文件。 是否可以在 /resources 文件夾中創建文件夾和子文件夾? 是的,它可以使用 Java 的 mkdir。 但請記住,創建文件夾名稱時,會使用當前時間戳動態附加諸如“2008”之類的字符串。 並在檢索時,檢索各個文件夾中名稱為“2008|”、“2009”等的所有文件。如果文件名變得過於遞歸和乏味,可能是可以使用一些具有隨機字符串且長度固定的算法。當然,我們可以將字符串的所有排列和組合充分利用,以將字符串(文件名)(文件名的可重用排列)的數量保持在最低限度。希望我回答了你的問題。
完成任務有幾個步驟:
Model
類public class Model implements Serializable { public int resId; public String fname; public Model (int resId, String name){ this.resId = resId; this.fname = name; } public int getResId() { return resId; } public void setResId(int resId) { this.resId = resId; } }
public void listRawFiles(String word){ String type = "raw"; Resources res = getResources(); // Get the list of MP3 files that start with the specified word for (int i = 1; ; i++) { String name = word + i; Log.e("Resource", name); // Get the ID of the resource with the specified name and type int id = res.getIdentifier(name, type, getPackageName()); // If the ID is invalid, we have reached the end of the list if (id == 0) { break; } // Add the resource name to the list Model model = new Model(id,name, "0"); files.add(model); //files is Model type arraylist } }
現在要從原始文件夾中讀取特定文件,請將函數調用為
listRawFiles("songFrom2008_");
在這里,我假設您的原始文件夾中的歌曲名稱為 songFrom2008_1、songFrom2008_2...、songFrom2010_1... 等等。
要調用 2010 年使用的歌曲列表,
listRawFiles("songFrom2010_");
在您的musicListView.setOnItemClickListener
中,您可以使用:
Model model = arrayList.get(i); //arrayList is Model type
musicplayer = MediaPlayer.create(MainActivity.this, model.getResId());
musicplayer.start();
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.