Как создать.csv на андроид
Моя цель - создать файл.csv из таблицы, распечатать отчет. Затем я могу сохранить этот файл.csv в моей SDCard. Я сослался на некоторые вопросы, подобные этому, но они просят предоставить файл jar. Есть ли какой-либо другой способ без jar-файла для интеграции?
Имел интегрировать файл JAR в компонент au.com.bytecode.opencsv.CSVWriter... Что я не могу найти здесь, это логика для записи в новую строку... Помощь?
4 ответа
После поисков по интернету я получил решение создать файл CSV в приложении для Android, во внутреннем хранилище (без SD-карты), поэтому я решил поделиться с другими, как создать файл CSV в Android и как прикрепить его к почте.
Первая загрузка Opencsv.jar
библиотека и добавить в свой проект Android. https://sourceforge.net/projects/opencsv/files/opencsv/
Шаги, чтобы добавить файл JAR в Android-проекте:
- Измените структуру файла Android Studio Android на Project (вверху слева под именем проекта Android, измените на Project)
- копия
opencsv.jar
файл и вставить вlibs
папка. - Щелкните правой кнопкой мыши
opencsv.jar
подать и нажатьAdd as library
,
Добавьте разрешение в Menifest.xml(если API устройства имеет значение 23 или более, проверьте разрешение RunTime)
<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
}
Теперь часть кода: создание 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();
}
}
});
Теперь, если вы хотите просмотреть свой CSV-файл внутри Android, выполните следующие действия:
- Зайдите в Файловый менеджер / Мои файлы на телефон.
- Перейдите во внутреннее хранилище / Local, просто прокрутите, вы получите ваш CSV-файл.
- Если файл CSV не открывается на вашем устройстве, установите Csv Viewer из Play Store.
Теперь, если вы хотите прикрепить этот 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"));
}
});
Проверьте код ниже, чтобы создать файл CSV. нет необходимости использовать файл JAR.
Вы должны сохранить один CSV-файл на SD-карте.
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" />
Это будет работать:)
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" />
непосредственно перед тегом приложения
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() + "/" + "Student.csv";
System.out.println("Write CSV file:");
CsvFileWriter.writeCsvFile(filename, id, SName, CName, activityEnterTokenBinding.etTokenNumber.getText().toString(),activityEnterTokenBinding.etAmout.getText().toString());
class CsvFileWriter {
private static final String COMMA_DELIMITER = ",";
private static final String NEW_LINE_SEPARATOR = "\n";
//CSV file header
private static final String FILE_HEADER = "id,firstName,lastName,gender,age";
static void writeCsvFile(String fileName, String id, String SName, String CName, String token, String amount) {
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(fileName);
//Write the CSV file header
fileWriter.append(FILE_HEADER);
//Add a new line separator after the header
fileWriter.append(NEW_LINE_SEPARATOR);
//Write a new student object list to the CSV file
fileWriter.append(id);
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(SName);
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(CName);
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(token);
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(amount);
fileWriter.append(NEW_LINE_SEPARATOR);
System.out.println("CSV file was created successfully !!!");
} catch (Exception e) {
System.out.println("Error in CsvFileWriter !!!");
e.printStackTrace();
} finally {
try {
assert fileWriter != null;
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
System.out.println("Error while flushing/closing fileWriter !!!");
e.printStackTrace();
}
}
}
}