【问题标题】:saving a text or CSV file with strings from edittext使用 edittext 中的字符串保存文本或 CSV 文件
【发布时间】:2017-03-27 08:31:31
【问题描述】:

我需要一个简单的应用程序,在手机(根或 SD 卡)中创建一个文本文件 (.txt),其中包含来自更多 edittext 的各种字符串。一个按钮确认输入数据。

文件中的输出示例必须是:

output.txt

John ; Smith ; 10/05/1970 ; 

我也有兴趣将数据导出到 CSV 文件。这是代码:

MainActivity.java

package com.example.utente.questionario;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    final EditText editText1 = (EditText) findViewById(R.id.editText1);
    final EditText editText2 = (EditText) findViewById(R.id.editText2);
    final EditText editText3 = (EditText) findViewById(R.id.editText3);
    final Button button1 = (Button) findViewById(R.id.button1);


    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.utente.questionario.MainActivity">

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    android:hint="Name"
    android:layout_marginTop="74dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    android:hint="Surname"
    android:layout_below="@+id/editText1"
    android:layout_alignStart="@+id/editText1"
    android:layout_marginTop="42dp" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Birth date"
    android:textSize="18dp"
    android:layout_marginBottom="67dp"
    android:layout_above="@+id/button1"
    android:layout_centerHorizontal="true" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Generate file"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="90dp" />

<EditText
    android:id="@+id/editText3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="date"
    android:hint="dd/mm/yyyy"
    android:layout_centerVertical="true"
    android:layout_alignStart="@+id/editText2" />

</RelativeLayout>

更新:MainActivity.java 在 Riten 的回答之后:

package com.example.utente.questionario;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText editText1 = (EditText) findViewById(R.id.editText1);
    final EditText editText2 = (EditText) findViewById(R.id.editText2);
    final EditText editText3 = (EditText) findViewById(R.id.editText3);
    final Button button1 = (Button) findViewById(R.id.button1);

    String name = editText1.getText().toString();
    String surname = editText2.getText().toString();
    String birthDate = editText3.getText().toString();

    private String getOrderText(String aa, String bb, String cc){

        StringBuilder sb = new StringBuilder();
        sb.append(aa+ ";");
        sb.append(" " + bb+ ";");
        sb.append(" " + cc);

            return sb.toString();
    }

    try {
        FileOutputStream fileOut=openFileOutput("FileName.txt", MODE_APPEND); // you can directly give file name as FileName.csv
        OutputStreamWriter outputWriter=new OutputStreamWriter(fileOut);
        outputWriter.write(getOrderText(name, surname, birthDate));
        outputWriter.write("\n");
        outputWriter.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

【问题讨论】:

    标签: android android-edittext export export-to-csv


    【解决方案1】:

    你可以试试这个:

     try {
            FileOutputStream fileOut=openFileOutput("FileName.txt", MODE_APPEND); // you can directly give file name as FileName.csv
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileOut);
            outputWriter.write(getOrderText("string from edittext", "string from edittext", "string from edittext"));
            outputWriter.write("\n");
            outputWriter.close();
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    那么getOrderText可以定义为:

     private String getOrderText(String aa, String bb, String cc){
    
        StringBuilder sb = new StringBuilder();
        sb.append(aa+ ";");
        sb.append(" " + bb+ ";");
        sb.append(" " + cc);
    
        return sb.toString();
    }
    

    希望对你有帮助……

    【讨论】:

    • GetOrderText 方法是否有错误? “private String getOrderText”之后的 Android Studio 建议“预期;”在“return sb.toString();”之后建议“无法从具有 void 结果类型的方法返回值”。
    • @Miche85 不,没有这样的错误。它工作得很好。请检查 getOrderText 方法上的返回类型...
    • 你能告诉我正确的代码吗? try-catch 和 getOrderText 合并在一个文本中?谢谢
    • @Miche85 我可以看一次你的代码吗?我想知道你遇到了什么错误?
    • 我在您的帮助下添加了更新后的 MainActivity.java。其中的错误在哪里?
    猜你喜欢
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多