【问题标题】:What is the path of the base folder for android projects?android项目的基本文件夹的路径是什么?
【发布时间】:2015-10-04 10:22:54
【问题描述】:

我在 Android Studio 中有一个项目,我想从文件中读取数据,但我想避免使用绝对路径。我想写一些类似于File("FileName.extension"); 的东西,没有任何/../folder 的东西。

所以我的问题是这个文件夹在层次结构中的哪个位置?

编辑: 我正在尝试在 Activity 之外读取文件。我有一个需要数据的子类,所以我试图在那里读取它。

【问题讨论】:

  • 您最好将文件放在应用的 Asset 文件夹中。
  • 可以使用 Context.getFilesDir() 获取内部存储路径。

标签: java android path


【解决方案1】:

将文件放在 Asset 文件夹中,然后通过 AssetManager 访问它

AssetManager assetManager = getResources().getAssets();
InputStream inputStream = assetManager.open("MyFile.txt");
//to get the content of the file as String
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
     out.append(line);
}
String myString=out.toString();
reader.close();

【讨论】:

  • 我需要将整个内容读入一个字符串,我尝试使用`new Scanner(new File("VertexShader.txt")).useDelimiter("\\Z").next() ;`。我可以使用资产管理器获取文件参考吗?编辑:openFD 函数返回一个 AssetFileDescriptor,但我可以将它用作文件引用吗?
  • @Noobs,我编辑了答案。从 AssetManager 中,您可以获得 InputStream,您可以根据需要操作流。
  • 问题是我不能使用 getResources() 函数(可能),因为我不在活动类中。有没有办法在非活动类中执行此操作而无需发送上下文以供骑行?
  • 对不起,你不能!您必须引用上下文(或 ApplicationContext)。但是,为什么不将上下文作为方法的参数传递呢?有什么特殊情况吗?
  • 哦,好的。好吧,我想我将把上下文发送下来。这不是世界末日。非常感谢!我需要它一次来读取我的 OpenGL 处理程序的构造函数中的文本文件。我需要将着色器代码读入一个字符串,以便为显卡编译它。
【解决方案2】:

您可以使用资产文件夹来存储文件。例如,从一个活动中,您可以使用方法

getAssets().open("filename.txt")));

以 InputStream 的形式打开名为 filename.txt 的文件。欲了解更多信息,请阅读

read file from assets

Where do I place the 'assets' folder in Android Studio?

【讨论】:

    【解决方案3】:

    避免任何路径实际上并不是一个好习惯,因为 Android Gradle 构建系统要求您将所有资产放在 asset 文件夹下,以确保正确组织。

    但如果您真的想避免使用绝对路径,您可以选择 makata 的答案,也可以这样做 -

    • 打开项目的根目录。假设您的项目名称是 MyAndroidProject

    • 查看文件MyAndroidProject.iml。 在 <configuration> 标记内,您应该看到

    <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />.

    如果您没有看到任何此类选项,请转到 /MyAndroidProject/app/ 并打开 app.iml

    • /src/main/assets 更改为/src/main/java/com/mypackage/subpackage/myandroidproject

    现在您可以将所有资产放入应用程序包中,所有文件都可以根据需要从那里读取。但是,你会弄乱你不想弄乱的文件,这可能会导致 IMO 出现问题。

    【讨论】:

    • 我明白了。好吧,我要从文件中加载代码,我不想用字符串连接进行编程。我不介意将它放在资产文件夹中,但我不明白为什么从文件中读取一串字节并将其保存在字符串中如此困难。在 C 语言中,您可以在一行中完成此操作。有了这个系统,我必须写 10+,我觉得这很浪费。
    • 是的,我同意当时的事情要简单得多,但事情已经发生了变化。今天,组织良好、质量好的代码比以往任何时候都更加重要。为此,我们开发人员将不得不做出一些牺牲。
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2023-03-28
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多