如何在android上创建.csv

时间:2012-07-05 09:57:07

标签: android

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

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

3 个答案:

答案 0 :(得分:12)

检查以下代码以生成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" />

答案 1 :(得分:5)

通过互联网搜索后我得到了在Android App中创建Csv文件的解决方案, 内部存储(没有SD卡),所以我决定与他人分享如何在android和amp;中创建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
  4. 向Menifest.xml添加权限(如果设备API为23或更高,请检查运行时权限)

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

    打开 build.gradle(模块:应用)并检查它是否已添加:

    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
    4. 现在,如果您要将此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"));
                  }
              });
      

答案 2 :(得分:2)

这将有效:)

    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" />

在应用程序标记之前