Android获取U盘目录实现方法

1. 流程概述

为了帮助小白实现Android获取U盘目录的功能,我们将按照以下步骤进行指导:

步骤 描述
1 检测U盘是否已连接
2 获取U盘的存储路径
3 遍历U盘目录
4 显示U盘目录内容

下面我们逐步介绍每个步骤的具体实现。

2. 检测U盘是否已连接

在Android中,我们可以通过注册广播接收器来监听U盘的插拔事件,来判断U盘是否已连接。

首先,我们需要在AndroidManifest.xml文件中添加以下权限和广播接收器:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<receiver android:name=".UsbReceiver">
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
        <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
    </intent-filter>
</receiver>

然后,创建一个名为UsbReceiver的广播接收器类,实现对U盘插拔事件的监听:

public class UsbReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
            // U盘已连接
        } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
            // U盘已断开连接
        }
    }
}

3. 获取U盘的存储路径

当U盘已连接时,我们可以通过UsbManager获取到U盘的存储路径。

首先,我们需要在UsbReceiver的onReceive方法中获取UsbDevice对象:

UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

然后,通过UsbDevice对象获取U盘的存储路径:

String usbPath = usbDevice.getFilePath();

4. 遍历U盘目录

获取到U盘的存储路径后,我们可以使用File类来遍历U盘的目录。

首先,创建一个File对象,传入U盘的存储路径:

File usbRoot = new File(usbPath);

然后,使用File对象的listFiles方法获取U盘根目录下的所有文件和文件夹:

File[] files = usbRoot.listFiles();

接下来,我们可以使用递归的方式遍历U盘的所有文件和文件夹:

private void traverseFile(File file) {
    if (file.isDirectory()) {
        File[] subFiles = file.listFiles();
        for (File subFile : subFiles) {
            traverseFile(subFile);
        }
    } else {
        // 处理文件逻辑
    }
}

// 调用遍历方法
traverseFile(usbRoot);

5. 显示U盘目录内容

在遍历U盘目录时,我们可以将文件和文件夹的信息保存到一个列表中,然后使用RecyclerView等控件进行显示。

首先,创建一个List来保存文件和文件夹的信息:

List<String> fileList = new ArrayList<>();

然后,在遍历U盘目录时,将文件和文件夹的名称添加到列表中:

private void traverseFile(File file) {
    if (file.isDirectory()) {
        File[] subFiles = file.listFiles();
        for (File subFile : subFiles) {
            traverseFile(subFile);
        }
    } else {
        fileList.add(file.getName());
    }
}

最后,将列表数据传递给RecyclerView等控件进行显示。

6. 完整代码示例

下面是一个完整的示例代码,包括了上述步骤的实现:

public class MainActivity extends AppCompatActivity {
    private List<String> fileList = new ArrayList<>();
    private RecyclerView recyclerView;
    private FileAdapter fileAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recycler_view);
        fileAdapter = new FileAdapter