Android开发读取内存卡上的xls文件保存到数据库中
在Android应用开发中,有时需要从外部存储设备(如SD卡)读取文件并将其数据导入到应用的数据库中,本文将详细介绍如何在Android应用中实现这一功能,特别是针对Excel文件(.xls格式),我们将分几个步骤进行:获取权限、读取SD卡上的Excel文件、解析Excel文件内容以及将数据保存到SQLite数据库中。
1. 获取权限
在Android 6.0及以上版本中,访问外部存储需要动态请求权限,你需要在AndroidManifest.xml
文件中声明读取外部存储的权限,并在运行时请求该权限。
AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
动态请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE); }
2. 读取SD卡上的Excel文件
使用Apache POI库来读取Excel文件,在你的项目的build.gradle
文件中添加POI库的依赖。
build.gradle
implementation 'org.apache.poi:poi:5.2.3' implementation 'org.apache.poi:poi-ooxml:5.2.3'
编写代码读取SD卡上的Excel文件。
读取Excel文件
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ExcelReader { public List<String[]> readExcelFile(String filePath) { List<String[]> data = new ArrayList<>(); try (FileInputStream fis = new FileInputStream(new File(filePath)); Workbook workbook = new HSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); // 假设我们只读取第一个sheet for (Row row : sheet) { List<String> rowData = new ArrayList<>(); for (Cell cell : row) { rowData.add(cell.toString()); } data.add(rowData.toArray(new String[0])); } } catch (IOException e) { e.printStackTrace(); } return data; } }
3. 解析Excel文件内容
在上面的代码中,我们已经将Excel文件的内容读入到一个List<String[]>
中,每个String[]
代表一行数据,我们需要将这些数据解析并插入到SQLite数据库中。
4. 将数据保存到SQLite数据库中
创建一个SQLiteOpenHelper子类来管理数据库的创建和升级。
SQLiteOpenHelper子类
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "MyDatabase.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "MyTable"; private static final String COLUMN_ID = "id"; private static final String COLUMN_DATA = "data"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_DATA + " TEXT)"; db.execSQL(createTable); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } }
编写代码将解析后的数据插入到数据库中。
插入数据到数据库
import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import java.util.List; public class DatabaseManager { private DatabaseHelper dbHelper; public DatabaseManager(Context context) { dbHelper = new DatabaseHelper(context); } public void insertData(List<String[]> data) { SQLiteDatabase db = dbHelper.getWritableDatabase(); for (String[] row : data) { ContentValues values = new ContentValues(); values.put("data", String.join(",", row)); // 将行数据转换为逗号分隔的字符串 db.insert("MyTable", null, values); } db.close(); } }
5. 整合代码
将上述步骤整合到一个活动中,完成从读取Excel文件到保存数据到数据库的整个过程。
MainActivity.java
import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.List; public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE = 100; private DatabaseManager databaseManager; private ExcelReader excelReader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); databaseManager = new DatabaseManager(this); excelReader = new ExcelReader(); if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE); } else { readAndSaveExcelData(); } } private void readAndSaveExcelData() { String filePath = "/sdcard/example.xls"; // 请根据实际情况修改文件路径 List<String[]> data = excelReader.readExcelFile(filePath); databaseManager.insertData(data); } }
通过以上步骤,你已经成功地从SD卡上读取了Excel文件,并将数据保存到了SQLite数据库中,这种方法适用于简单的Excel文件解析和数据迁移任务,如果需要处理更复杂的Excel文件或进行更高级的数据操作,可以考虑使用更专业的数据处理库或工具。
以上就是关于“android开发读取内存卡上的xls文件保存到数据库中”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/625327.html