gpt4 book ai didi

java - 如何将文件从文件选择器传递到函数?

转载 作者:行者123 更新时间:2023-12-02 04:53:15 24 4
gpt4 key购买 nike

我有一个应用程序,可以打开文件选择器,并在 Toast 消息中输出该文件的路径。但我想更改它,以便将我选择的文件作为参数传递给函数。

我的 Activity 如下所示:

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button button = (Button) findViewById(R.id.btn_picker);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(intent, 7);
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub

switch (requestCode) {
case 7:
if (resultCode == RESULT_OK) {
String PathHolder = data.getData().getPath();
Toast.makeText(MainActivity.this, "The Files path is: "+ PathHolder, Toast.LENGTH_LONG).show();
}
break;
}
}
}

它做了它应该做的事情,但我不想输出文件路径,而是调用该函数

 importToFile()

来自管理类。

我想做这样的事情:

manage.importToFile(File1)

其中 File1 是我从文件选择器中选择的文件。

我怎样才能做到这一点。

提前致谢。

最佳答案

您可以使用File android 中用于处理文件的类。使用所选文件的路径创建一个 File 实例,并将其传递给您的该方法。像这样的事情:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub

switch (requestCode) {
case 7:
if (resultCode == RESULT_OK) {
// as @Taseer Ahmad said its not a good way to get path of the file.
//String PathHolder = data.getData().getPath();
String PathHolder = getPath(this, data.getData());
if (!TextUtils.isEmpty(PathHolder)) {
File file = new File(PathHolder);
manager.importToFile(file);
Toast.makeText(MainActivity.this, "The Files path is: "+ PathHolder, Toast.LENGTH_LONG).show();
}
}
break;
}
}

编辑
正如 @Taseer Ahmad 所说,data.getData().getPath() 不是获取所选文件路径的安全方法。此代码复制自here .

public static String getPath(Context context, Uri uri) throws URISyntaxException {
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = { "_data" };
Cursor cursor = null;

try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
// Eat it
}
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}

return null;
}

关于java - 如何将文件从文件选择器传递到函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56423267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com