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

时间:2019-06-03 08:00:25

标签: java android

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

我的活动如下:

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是我从文件选择器中选择的文件。

我该怎么做。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在android中使用File类来处理文件。使用所选文件的路径创建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;
}