如何在Android开发中读取内存卡上的XLS文件并保存到数据库?

Android开发读取内存卡上的xls文件保存到数据库中

如何在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文件。

如何在Android开发中读取内存卡上的XLS文件并保存到数据库?

读取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. 整合代码

如何在Android开发中读取内存卡上的XLS文件并保存到数据库?

将上述步骤整合到一个活动中,完成从读取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

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-11-02 20:11
Next 2024-11-02 20:24

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入