Android通过uri获取文件路径
时间: 2023-06-01 08:04:03 浏览: 105
在Android中,可以通过以下步骤获取文件路径:
1. 从Intent获取Uri对象
```java
Uri uri = intent.getData();
```
2. 通过ContentResolver获取文件路径
```java
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
```
注意:如果Uri是File类型的,可以直接通过getAbsolutePath()方法获取文件路径。
相关问题
android根据uri获取资源路径
在Android中,可以使用`ContentResolver`对象来处理URI并获取文件路径。下面是一个示例代码,可以根据URI获取相应的文件路径:
```java
public String getFilePathFromUri(Context context, Uri uri) {
String filePath = "";
// 判断URI的协议是不是 content://
if (uri.getScheme().equals("content")) {
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
filePath = cursor.getString(columnIndex);
cursor.close();
}
} else if (uri.getScheme().equals("file")) {
filePath = uri.getPath();
}
return filePath;
}
```
在上述代码中,我们通过判断URI的协议是否为`content`来确定是从内容提供者中获取文件路径,还是从普通文件中获取文件路径。如果是从内容提供者中获取文件路径,则使用`ContentResolver`对象获取Cursor对象,并从中获取文件路径;如果是从普通文件中获取文件路径,则直接使用URI的路径。请注意,上述代码中的`MediaStore.Images.Media.DATA`是获取文件路径的列名,如果您需要获取其他类型的文件路径,请根据实际情况进行修改。
Android解析uri路径的Excel文件
要在Android中解析URI路径的Excel文件,您可以使用Apache POI库。以下是一个简单的示例代码,演示如何使用Apache POI解析Excel文件:
```java
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "ExcelParsing";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 假设您已经有一个URI路径,这是从系统分享中获取的
Uri fileUri = getIntent().getData();
// 解析Excel文件
parseExcelFile(this, fileUri);
}
private void parseExcelFile(Context context, Uri fileUri) {
try {
InputStream inputStream = context.getContentResolver().openInputStream(fileUri);
// 使用WorkbookFactory打开Excel文件
Workbook workbook = WorkbookFactory.create(inputStream);
// 获取第一个Sheet
Sheet sheet = workbook.getSheetAt(0);
// 遍历行
for (Row row : sheet) {
// 遍历单元格
for (Cell cell : row) {
// 获取单元格值并打印
String cellValue = cell.toString();
Log.d(TAG, "Cell value: " + cellValue);
}
}
// 关闭输入流和工作簿
inputStream.close();
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(context, "File not found!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(context, "Error reading file!", Toast.LENGTH_SHORT).show();
}
}
}
```
这段代码会打开URI路径指向的Excel文件,并使用Apache POI库解析文件内容。请确保您的应用程序已添加Apache POI库的依赖项。您可以在build.gradle文件中的dependencies部分添加以下行来添加依赖项:
```groovy
implementation 'org.apache.poi:poi:4.1.2'
implementation 'org.apache.poi:poi-ooxml:4.1.2'
```
请注意,此示例仅用于演示目的。您可能需要根据实际需求进行适当的异常处理和数据处理。