如何在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

(0)
打赏 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
上一篇 2024-11-02 20:11
下一篇 2024-11-02 20:24

相关推荐

  • Android数据存储方式有哪些?

    Android提供了多种数据存储方式,以满足不同应用需求,以下是对各种数据存储方式的详细阐述:一、SharedPreferences存储数据1、定义与特点: – SharedPreferences是Android平台上一个轻量级的存储类,主要用于保存一些常用的配置信息,如窗口状态、用户偏好设置等, – 它采用了……

    2024-11-05
    04
  • Android设计模式之适配器(Adapter)模式

    适配器模式简介适配器模式(Adapter Pattern)是一种结构型设计模式,它主要用于使原本不兼容的接口能够相互协作,在Android开发中,适配器模式可以帮助我们实现不同版本的系统之间的兼容,以及将第三方库与现有代码集成。适配器模式主要包括以下几个角色:1、目标对象(Target):需要被适配的对象,通常是一个抽象类或接口。2、……

    2024-01-16
    0191
  • android 网络log_log

    Android网络log_log是一种用于记录网络请求和响应信息的日志工具,可以帮助开发者快速定位和解决问题。

    2024-06-17
    0100
  • 如何有效使用LinearLayout布局来新建布局?

    LinearLayout是Android中一种常用的布局方式,它可以让子控件按照水平或垂直的方向依次排列。要新建一个LinearLayout布局,可以在XML文件中添加如下代码:,,“xml,,,“

    2024-07-22
    069
  • Android自定义背景弹出框的方法有哪些

    在Android开发中,自定义背景弹出框是一种常见的需求,它可以让我们的应用程序看起来更加个性化和专业,如何自定义背景弹出框呢?本文将介绍几种常用的方法。1、使用AlertDialogAlertDialog是Android系统提供的一个对话框,我们可以通过设置其Builder的属性来自定义背景,以下是一个简单的示例:AlertDial……

    2024-01-10
    0241
  • Android SDK Manager无法更新如何解决

    A1:可以尝试检查网络连接、修改系统代理设置、关闭或调整安全软件设置以及清除本地缓存并重新下载SDK Platform Tools,具体操作方法请参考本文第二部分,Q2:Android SDK Platform-Tools是什么?A2:Android SDK Platform-Tools是Android开发工具包中的一个组件,包含了编译和运行Android应用程序所需的工具,如adb、fast

    2023-12-16
    0109

发表回复

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

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