测试MediaPlayer的小程序,读取不到文件

时间:2021-10-31 13:15:40
为什么在android project中下面代码的home.listFiles(mf)打出来的是null,而在java project中测试的是有内容的?

android project中的代码

(1)
package com.mj.test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class TestMediaPlayer extends ListActivity {
// private static final String MEDIA_PATH = new String("/sdcard/");
private static final String MEDIA_PATH = new String("F:\\MP3\\other");
// private static final String MEDIA_PATH = new String("\\\\raw\\");

private List<String> songs = new ArrayList<String>();
// private List songs = new ArrayList();

private MediaPlayer mp = new MediaPlayer();

private int currentPosition = 0;

@Override
public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.songlist);

updateSongList();
}

public void updateSongList()  {
Log.d("updateSongList", "MEDIA_PATH--------------=="+MEDIA_PATH);
File home = new File(MEDIA_PATH);
Log.d("updateSongList", "home--------------=="+home);
Mp3Filter mf=new Mp3Filter();
Log.d("updateSongList", "mf--------------=="+mf);
Log.d("updateSongList", "home.listFiles(mf)--------------=="+home.listFiles(mf));
if (home.listFiles(mf)!=null&&home.listFiles(mf).length > 0) {

for (File file : home.listFiles(new Mp3Filter())) {
// if (home.listFiles().length > 0) {
//
// for (File file :home.listFiles()) {
songs.add(file.getName());

}

Log.d("updateSongList", "songs.size()*************************"+songs.size());
ArrayAdapter<String> songList = new ArrayAdapter<String>(this,

android.R.layout.simple_list_item_1, songs);

setListAdapter(songList);

}
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
currentPosition = position;

playSong(MEDIA_PATH + songs.get(position));
}

private void playSong(String songPath) {

try {
mp.reset();

mp.setDataSource(songPath);

mp.prepare();

mp.start();

// Setup listener so next song starts automatically

mp.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {
nextSong();
}
});

} catch (IOException e) {

Log.v(getString(R.string.app_name), e.getMessage());

}
}

private void nextSong() {

if (++currentPosition >= songs.size()) {
// Last song, just reset currentPosition
currentPosition = 0;
} else{
playSong(MEDIA_PATH + songs.get(currentPosition));
}
}
}

(2)
package com.mj.test;

import java.io.File;
import java.io.FilenameFilter;

import android.util.Log;

public class Mp3Filter implements FilenameFilter {

public boolean accept(File dir, String filename) {
Log.d("Mp3Filter", "filename--------------------"+filename);
// System.out.println("filename--------------------"+filename);
return (filename.endsWith(".mp3"));
}

}

java project中的代码

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Test {
private static final String MEDIA_PATH = new String("F:\\MP3\\other");
// private static final String MEDIA_PATH = new String("\\\\raw\\");
/**
 * @param args
 */
public static void main(String[] args) {
System.out.println("----------------MEDIA_PATH=="+MEDIA_PATH);
List<String> songs = new ArrayList<String>();

File home = new File(MEDIA_PATH);

if (home.listFiles(new Mp3Filter()).length > 0) {

for (File file : home.listFiles(new Mp3Filter())) {

songs.add(file.getName());

}
}
System.out.println("------------songs.size()=="+songs.size());
}

}

6 个解决方案

#1


MEDIA_PATH=new string( F:),F盘怎么能读到呢

#2


换成读T卡吧

#3


引用 2 楼 zcpangzi 的回复:
换成读T卡吧


我现在将文件加到sdcard中,总是报Failed to push the item(s).错误

#4


模拟器?是不是Failed to push the item(s).---read only file system?

那就用终端命令 adb push 把文件拖进去,放dev或data目录下都可以,应该有写的权限,你试试

#5


为什么不用 Environment.getExternalStorageDirectory () 代替“/sdcard”呢

#6


private static final String MEDIA_PATH = new String("/sdcard/");
很少看到这么定义字符串常量的(⊙o⊙)

#1


MEDIA_PATH=new string( F:),F盘怎么能读到呢

#2


换成读T卡吧

#3


引用 2 楼 zcpangzi 的回复:
换成读T卡吧


我现在将文件加到sdcard中,总是报Failed to push the item(s).错误

#4


模拟器?是不是Failed to push the item(s).---read only file system?

那就用终端命令 adb push 把文件拖进去,放dev或data目录下都可以,应该有写的权限,你试试

#5


为什么不用 Environment.getExternalStorageDirectory () 代替“/sdcard”呢

#6


private static final String MEDIA_PATH = new String("/sdcard/");
很少看到这么定义字符串常量的(⊙o⊙)