【问题标题】:How to create a .csv on android如何在 android 上创建 .csv
【发布时间】:2012-07-05 09:57:07
【问题描述】:

我的目标是从表格创建一个 .csv 文件,以打印报告。然后我可以将此 .csv 文件存储到我的 sdCard 中。我提到了一些与此类似的问题,但他们要求提供一个 jar 文件。有没有其他方法可以不集成jar文件?

已在组件 au.com.bytecode.opencsv.CSVWriter 中集成了一个 jar 文件...我在这里找不到的是写入新行的逻辑...帮助?

【问题讨论】:

标签: android


【解决方案1】:

在互联网上搜索了很多后,我得到了在 android App 中创建 Csv 文件的解决方案, 内部存储(不带 SD 卡),所以我决定与其他人分享如何在 android 中创建 csv 文件以及如何将其附加到邮件中。

首先下载Opencsv.jar 库并添加到您的android 项目中。 https://sourceforge.net/projects/opencsv/files/opencsv/

直接添加实现(.jar不用下载)

implementation 'com.opencsv:opencsv:4.6' // Here is opencsv library 

或者在android项目中添加jar文件:

  1. 将 Android Studio 文件结构 Android 更改为 Project(在项目名称 Android 的左下方,更改为 Project)
  2. 复制opencsv.jar文件并粘贴到libs文件夹中。
  3. 右击opencsv.jar文件并点击Add as library

向 Menifest.xml 添加权限(如果设备 API 为 23 或更高,请检查运行时权限)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

打开 build.gradle (Module:app) 并检查它是否已添加:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.android.support:recyclerview-v7:26.+'
    testCompile 'junit:junit:4.12'
    implementation files('libs/opencsv-4.1.jar') // Here is opencsv library added to project when using .jar
}

现在编码部分:创建 csv 文件并将数据插入其中。

 String csv = (Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCsvFile.csv"); // Here csv file name is MyCsvFile.csv


 //by Hiting button csv will create inside phone storage.
 buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            CSVWriter writer = null;
                try {
                    writer = new CSVWriter(new FileWriter(csv));

                    List<String[]> data = new ArrayList<String[]>();
                    data.add(new String[]{"Country", "Capital"});
                    data.add(new String[]{"India", "New Delhi"});
                    data.add(new String[]{"United States", "Washington D.C"});
                    data.add(new String[]{"Germany", "Berlin"});

                    writer.writeAll(data); // data is adding to csv 

                    writer.close();
                    callRead();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

现在,如果您想在 android 中查看您的 csv 文件,请按照以下步骤操作:

  1. 转到文件管理器/我的文件到您的手机。
  2. 转到内部存储/本地,只需滚动即可获得 csv 文件。
  3. 如果 csv 文件未在您的设备中打开,请从 Play 商店安装 Csv Viewer

现在,如果您想将此 csv 文件通过附件附加到您的应用中

以下是邮件中 csv 文件附件的代码:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent emailIntent = new Intent(Intent.ACTION_SEND);
                emailIntent.setType("text/plain");
                emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"email@example.com"});
                emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
                emailIntent.putExtra(Intent.EXTRA_TEXT, "body text");

                File file = new File(csv);
                Uri uri = Uri.fromFile(file);
                emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
                startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));
            }
        });

【讨论】:

  • 别忘了从Android手机设置>>应用>>你的应用名称>>(标题=应用设置)权限打开应用的权限>>打开存储 --> 宾果游戏!该文件可以保存 - 三星 Note 8 对我进行了注释代码行“callRead();”我知道为什么..
  • 它对我来说非常有用..我刚刚删除了 .getAbsolutePath() 并让它正常工作。;) 谢谢..
  • 欢迎,快乐编码@tenTen
  • 真棒解释...像魅力一样工作。
【解决方案2】:

检查以下代码以生成 CSV 文件。不需要使用jar文件。

您必须将一个 csv 文件保存到 SD-CARD。

Sample CSV FILE

public void exportEmailInCSV() throws IOException {
        {

            File folder = new File(Environment.getExternalStorageDirectory()
                    + "/Folder");

            boolean var = false;
            if (!folder.exists())
                var = folder.mkdir();

            System.out.println("" + var);


            final String filename = folder.toString() + "/" + "Test.csv";

            // show waiting screen
            CharSequence contentTitle = getString(R.string.app_name);
            final ProgressDialog progDailog = ProgressDialog.show(
                    MailConfiguration.this, contentTitle, "even geduld aub...",
                    true);//please wait
            final Handler handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {




                }
            };

            new Thread() {
                public void run() {
                    try {

                        FileWriter fw = new FileWriter(filename);

                        Cursor cursor = db.selectAll();

                        fw.append("No");
                        fw.append(',');

                        fw.append("code");
                        fw.append(',');

                        fw.append("nr");
                        fw.append(',');

                        fw.append("Orde");
                        fw.append(',');

                        fw.append("Da");
                        fw.append(',');

                        fw.append("Date");
                        fw.append(',');

                        fw.append("Leverancier");
                        fw.append(',');

                        fw.append("Baaln");
                        fw.append(',');

                        fw.append("asd");
                        fw.append(',');

                        fw.append("Kwaliteit");
                        fw.append(',');

                        fw.append("asd");
                        fw.append(',');

                        fw.append('\n');

                        if (cursor.moveToFirst()) {
                            do {
                                fw.append(cursor.getString(0));
                                fw.append(',');

                                fw.append(cursor.getString(1));
                                fw.append(',');

                                fw.append(cursor.getString(2));
                                fw.append(',');

                                fw.append(cursor.getString(3));
                                fw.append(',');

                                fw.append(cursor.getString(4));
                                fw.append(',');

                                fw.append(cursor.getString(5));
                                fw.append(',');

                                fw.append(cursor.getString(6));
                                fw.append(',');

                                fw.append(cursor.getString(7));
                                fw.append(',');

                                fw.append(cursor.getString(8));
                                fw.append(',');

                                fw.append(cursor.getString(9));
                                fw.append(',');

                                fw.append(cursor.getString(10));
                                fw.append(',');

                                fw.append('\n');

                            } while (cursor.moveToNext());
                        }
                        if (cursor != null && !cursor.isClosed()) {
                            cursor.close();
                        }

                        // fw.flush();
                        fw.close();

                    } catch (Exception e) {
                    }
                    handler.sendEmptyMessage(0);
                    progDailog.dismiss();
                }
            }.start();

        }

    }

在清单中添加此权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

【讨论】:

  • 字符串包含空格时不工作。
  • 不使用 jar 只是重新发明轮子...
【解决方案3】:

这会起作用:)

    try {
    String TestString="";

    FileOutputStream fOut = openFileOutput(filename, MODE_WORLD_READABLE);

    OutputStreamWriter osw = new OutputStreamWriter(fOut); 

       // Write the string to the file
     for( i=1; i<total_row; i++)
        {

            for( j=1; j<total_col; j++)
            {
                TestString+=table[i][j].getText().toString();        // to pass in every widget a context of activity (necessary) 
                TestString += " ,";
            }
             TestString+="\n";
        }
     Log.v("the string is",TestString);
     osw.write(TestString);
     osw.flush();
     osw.close();
    }
    catch (IOException ioe) 
      {ioe.printStackTrace();}

在清单中你必须写

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

就在应用标签之前

【讨论】:

  • Khurram,对不起,伙计......我是菜鸟......我不明白你的评论......//在每个小部件中传递一个活动上下文(必要)TestString +=“ ”;这里没有小部件???
  • Hey table[][] 是编辑文本的二维数组。该行正在从该二维数组的每个单元格中获取数据并将其以字符串的形式存储:)
  • 并在每个字符串之后附加一个“逗号”,就像 csv 一样
  • 感谢您抽出时间 Khurram,但采取了不同的方法
  • 您可能没有意识到这一点,但必须对 CSV 字段中的逗号进行转义。如果其中一个值包含逗号,那么接下来读取 CSV 的人就会搞砸。
猜你喜欢
  • 2013-12-17
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2017-11-17
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多