public void LoadSounds() throws IOException
{
String extState = Environment.getExternalStorageState();
if(!extState.equals(Environment.MEDIA_MOUNTED)) {
//handle error here
}
else {
File sd = new File(Environment.getExternalStorageDirectory ()); //this needs to be a folder the user can access, like media
像往常一样,文档没有提供实际的使用示例,但它说明了 - 如果您使用的是API级别8或更高版本,请使用getExternalFilesDir()打开一个文件,该文件代表应保存文件的外部存储目录。此方法采用type参数指定所需的子目录类型,例如DIRECTORY_MUSIC ...
我该如何使用它? 谢谢
编辑: 如果我尝试使用文件路径字符串填充微调器数组,这会使它崩溃。
File path = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
File sd = new File(path, "/myFolder");
File[] sdDirList = sd.listFiles(new WavFilter());
if (sdDirList != null)
{
//sort the spinner
amountofiles = sdDirList.length;
array_spinner=new String[amountofiles];
......
final Spinner s = (Spinner) findViewById(R.id.spinner1); //crashes here
ArrayAdapter<?> adapter = new ArrayAdapter<Object>(this,
android.R.layout.select_dialog_item, array_spinner);
EDIT2: 好的,所以我做了这个测试,应该写一个txt文件到音乐目录。 我运行应用程序,没有txt文件写在我能找到的设备上的任何地方。
// Path to write files to
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
String fname = "mytest.txt";
// Current state of the external media
String extState = Environment.getExternalStorageState();
// External media can be written onto
if (extState.equals(Environment.MEDIA_MOUNTED))
{
try {
// Make sure the path exists
boolean exists = (new File(path)).exists();
if (!exists){ new File(path).mkdirs(); }
// Open output stream
FileOutputStream fOut = new FileOutputStream(path + fname);
fOut.write("Test".getBytes());
// Close output stream
fOut.flush();
fOut.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
另一个编辑:我会让这个工作!! 因此,如果我使用此行,它会在SD卡上创建一个名为“Musictest”的文件夹。不明白??
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC + "test").getAbsolutePath();
/////////////////////////////////////////////// ///////////////////// 最终编辑: 这样就可以在设备音乐目录中查找名为test的文件夹。 如果它不存在,它将被创建。 (在这里做一些修复,如果为空则出错)然后列出目录中的文件并将它们添加到数组中。
public void LoadSounds() throws IOException
{
String extState = Environment.getExternalStorageState();
// Path to write files to
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC + "/test").getAbsolutePath();
if(!extState.equals(Environment.MEDIA_MOUNTED)) {
//handle error here
}
else {
//do your file work here
// Make sure the path exists
boolean exists = (new File(path)).exists();
//if not create it
if (!exists){ new File(path).mkdirs(); }
File sd = new File(path);
//This will return an array with all the Files (directories and files)
//in the external storage folder
File[] sdDirList = sd.listFiles();
if (sdDirList != null)
{
//add the files to the spinner array
array_spinnerLoad=new String[sdDirList.length];
files = new String[sdDirList.length];
for(int i=0;i<sdDirList.length;i++){
array_spinnerLoad[i] = sdDirList[i].getName();
files[i] = sdDirList[i].getAbsolutePath();
}
}
}
}
答案 0 :(得分:11)
如文档中所述,getExternalFilesDir()返回File。 File对象可以表示文件或目录。
因此:
File musicDirectory = new File( getExternalFilesDir(Environment.DIRECTORY_MUSIC));
会给你一个玩的对象。