.如何在android studio中将文件从项目资产文件夹复制到设备数据文件夹?

.如何在android studio中将文件从项目资产文件夹复制到设备数据文件夹?,android,sqlite,file-copying,android-assets,Android,Sqlite,File Copying,Android Assets,我正在尝试使用SQLiteAssetHelper,它要求我在PC上创建数据库并将其复制到assets/databases/databasename.db。我会这样做,但当我检查设备时,数据库和数据库文件夹都不在我应用程序的数据文件夹下 我是根据一段视频做的,而那个家伙没有做任何其他事情来复制 那么,这些文件应该自动复制到设备上吗? 如果没有,我如何复制文件?您正在解释的过程需要root用户访问设备上的应用程序存储,而出于安全考虑,在正常的非root设备上,这是不可能的。为此,您需要一个根设备或您

我正在尝试使用
SQLiteAssetHelper
,它要求我在PC上创建数据库并将其复制到
assets/databases/databasename.db
。我会这样做,但当我检查设备时,数据库和数据库文件夹都不在我应用程序的数据文件夹下

我是根据一段视频做的,而那个家伙没有做任何其他事情来复制

那么,这些文件应该自动复制到设备上吗?
如果没有,我如何复制文件?

您正在解释的过程需要root用户访问设备上的应用程序存储,而出于安全考虑,在正常的非root设备上,这是不可能的。为此,您需要一个根设备您可以在Android Studio中使用emulator,这是一种更简单、用户友好的方法:

从Android Studio打开emulator->设置->内存->内部存储->其他

将打开一个弹出窗口。单击浏览。您将可以访问应用程序的内部存储,以便管理数据库文件夹

p.S.:此外,您可能只需将您的应用程序与您拥有的数据库表打包,就像其他任何文件一样,只需将其放在您的
src/main/assets
文件夹下,并在运行时从代码访问即可。此线程中提供了代码示例:(由@Ezaldeen sahb建议)

那么,这些文件应该自动复制到设备上吗?如果没有,我如何复制文件

是的,但只有在尝试访问数据库时才会这样做。仅实例化扩展SQLiteAssetHelper的类不会复制数据库,因此,如果这就是您所做的全部,那么数据库将不可见

使用SQliteAssetHelper时应执行以下步骤:-

  • 创建您的项目
  • 修改build.gradle,将
    实现'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
    包含在依赖项部分
  • 创建资产文件夹,然后在资产文件夹中创建数据库文件夹,然后
  • 将数据库文件复制到databases文件夹中
  • 创建扩展SQLiteAssetThelper的数据库帮助器类
  • 实例化数据库助手
  • 访问数据库(复制数据库时)
  • 如果在执行步骤5时,您使用(基于问题中的信息)作为示例:-


    看到了吗?我知道了,但这不是我想要的,我想从android project asseets folderon pc上获取文件,复制到手机上的数据文件夹。这就是我试图解释的,我确实将数据库文件放在了src/main/assets下。我使用的库SQLiteAssetHelper应该在data/data/my.package.name/databases/mydatabase.db下找到该文件。事实是,该文件不在那里。我使用emulator,并在工具->查看窗口->设备文件资源管理器中查看它。数据库文件夹根本不在那里,谢谢!我做了你描述的一切。你的答案是完美的,然而,我的问题不是我所想的。我只是不小心在SQLiteAssetThelper构造函数中传递了空指针。
    public class DatabaseHelper extends SQLiteAssetHelper {
    
        public static final String DATABASENAME = "databasename.db"; //<<<<<<<<< MUST match file name in assets/databases
        public static final int DATABASEVERSION = 1;
    
        public DatabaseHelper(Context context) {
            super(context, DATABASENAME, null, DATABASEVERSION);
            this.getWritableDatabase(); //<<<<< will force database access and thus copy database from assets
        }
    }
    
    public class MainActivity extends AppCompatActivity {
    
        DatabaseHelper mDBHelper; //<<<<< declares the database helper
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mDBHelper = new DatabaseHelper(this); // instantiates the database helper
        }
    }