【问题标题】:Getting file path for local Android project files获取本地 Android 项目文件的文件路径
【发布时间】:2012-11-29 00:29:33
【问题描述】:

我想以编程方式访问将包含在我的项目文件夹中的特定文件。有没有办法做到这一点?如果是这样,我将文件放在我的项目文件夹中的什么位置,以及获取其文件路径的一些简单代码是什么?

private void saveFileToDrive() {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    java.io.File spreadsheet = new java.io.File("Untitled spreadsheet.xlsx");
                    String filePath = spreadsheet.getAbsolutePath();
                    System.out.println("file path is"+filePath);

                    URL fileURL = getClass().getClassLoader().getResource("Untitled spreadsheet.xlsx");
                    String filePath2 = fileURL.getPath();
                    System.out.println("file path2 is"+filePath2);

                    java.io.File fileContent = new java.io.File(filePath);
                    FileContent mediaContent = new FileContent("application/vnd.ms-excel", fileContent);

                    File body = new File();
                    body.setTitle(fileContent.getName());
                    body.setMimeType("application/vnd.ms-excel");


                    File file = service.files().insert(body, mediaContent).setConvert(true).execute();

                    if (file != null) {
                        showToast("File uploaded: " + file.getTitle());
                    }
                    else
                             ;
                } catch (UserRecoverableAuthIOException e) {

                    startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
                } catch (IOException e) {

                    e.printStackTrace();
                }
            }
        });
        t.start();
    }

【问题讨论】:

  • 注意接受的答案是错误的。

标签: java android file


【解决方案1】:

将文件放在项目的根文件夹中。然后获取文件 URL、路径和其他详细信息:

   File file = new File("test.txt");
   String filePath = file.getAbsolutePath();

编辑: 替代方式(如果文件在您的类路径中,例如将文件放在“src”文件夹中,并确保在编译后将其移动到“bin”或“classes”文件夹中):

  URL fileURL = getClass().getClassLoader().getResource(fileName);
  String fileName = fileURL.getFile();
  String filePath = fileURL.getPath();

【讨论】:

  • 我的 fileURL 被设置为 null,尽管我已按照您的建议将文件放在根文件夹中。
  • @JohnRoberts 您是否在某个 IDE 中运行您的程序,例如日食?
  • @JohnRoberts 您需要访问文件路径还是文件本身?
  • @JohnRoberts 用工作代码更新了答案。现在有两个选择。两者都在工作。尝试其中任何一个。
  • 这个答案是行不通的,因为它忽略了以这种方式打包的数据不是文字文件的事实。
【解决方案2】:

这在很大程度上取决于您要访问的文件类型。您可以将文件放在assetsres 的适当子目录中(请参阅Difference between /res and /assets directories)。

【讨论】:

  • 这更好作为评论和投票结束:你只是说“这取决于......”并链接到另一个答案。
  • 关键是,虽然这些机制使数据可用,但它不是 java.io.File
【解决方案3】:

所以您想访问应用程序内部的文件;并且您想直接这样做,即从 Android 上下文(然后使用 [android.|<package_name>.]R.<resource_type>.<resource_name>)。

对于位置,您有两种选择:res/raw 文件夹或 assets/ 文件夹(在 res 父文件夹之外)。

https://developer.android.com/guide/topics/resources/providing-resources.html的两个注释之间进行选择

以原始形式保存的任意文件。要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()

但是,如果您需要访问原始文件名和文件层次结构,您可以考虑将一些资源保存在assets/ 目录(而不是res/raw/)中。 assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取它们。

要直接访问res/raw/ 中的文件,即从Android 上下文(然后使用[android.|<package_name>.]R.<resource_type>.<resource_name>),您可以执行以下操作:

File file = new File("app/src/main/res/raw/country_data_from_world_bank.xml");
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2021-08-04
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多