阵列或其他解决方案

时间:2020-02-06 11:48:56

标签: android

我有这段代码来生成文件,

et_nombre = (EditText) findViewById(R.id.txt_nombre); // name file automatic
et_tienda = (EditText) findViewById(R.id.txt_tienda);  // Store Out
et_destino = (EditText) findViewById(R.id.etDestino); // Store In
et_contenido = (EditText) findViewById(R.id.txt_contenido); // Barcode

android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());
long msTime = System.currentTimeMillis();
Date curDateTime = new Date(msTime);

String t_origen=et_tienda.getText().toString();
String t_destino=et_destino.getText().toString();
et_nombre.setText("Traspaso_"+curDateTime+"  "+msTime);

public void Guardar(View view) {
    String nombre = et_nombre.getText().toString(); // EditText nombre fichero generado solo escritura desabilitada
    String letra_T = "T"; // valor fijo para cada línea del fichero
    String tienda = et_tienda.getText().toString();  // tienda origen  se repite en cada línea
    int tienda_num = Integer.parseInt(tienda);  // tienda origen formato int
    String tienda_destino = et_destino.getText().toString(); // tienda destino se repite en cada línea
    int tienda_des = Integer.parseInt(tienda_destino);  // tienda destino formato int
    String contenidos = et_contenido.getText().toString(); // código de barras escaneado uno por línea

    String prueba = String.format("%6d" , tienda_num );  // tienda origen con formato definido
    String destino = String.format("%6d" , tienda_des );  // tienda destino con formato definido
    String barras = String.format("%-25d" , new BigInteger(contenidos));  // código de barras con formato definido
    String unidad = "0000000001";  // unidad para cada lectura

    String contenido = letra_T + prueba +destino +barras +unidad;  // línea correcta

    try {
        File tarjetaSD = Environment.getExternalStorageDirectory();
        Toast.makeText(this, tarjetaSD.getPath(), Toast.LENGTH_SHORT).show();
        File rutaArchivo = new File(tarjetaSD.getPath(), nombre);
        OutputStreamWriter crearArchivo =new OutputStreamWriter(new FileOutputStream(rutaArchivo));
        //OutputStreamWriter crearArchivo = new OutputStreamWriter(openFileOutput(nombre, Activity.MODE_PRIVATE));
        crearArchivo.write(contenido);
        crearArchivo.flush();
        crearArchivo.close();
        Toast.makeText(this, "Guardado correctamente", Toast.LENGTH_SHORT).show();
        et_nombre.setText("");
        et_contenido.setText("");
        et_tienda.setText("");
        et_destino.setText("");
    } catch (IOException e) {
        Toast.makeText(this, "No se pudo guardar", Toast.LENGTH_SHORT).show();
    }
}

EditText et_contenido; //reading barcode  
EditText et_tienda; //Store out
EditText et_Destino; //Store In

Resulting file is correct  example  
txt_contenido : 99123456789
txt_tienda : 12
etDestino :  25
letra_T = "T"   fixed value.
unidad = "0000000001" fixed value.

T    12    2599123456789              0000000001

但是我想连续读取几个条形码,并将它们保存在同一文件中,并通过仅更改条形码的值来遵守格式。 哪个选项是正确的,创建一个数组和一个for或将edittext更改为多行并循环 感谢您的帮助

1 个答案:

答案 0 :(得分:0)

创建一个数组,经过多次读取后,将其写入文件比打开文件并为每次条形码读取写入该文件具有更高的性能,但是有时您必须将数组的内容刷新到文件,您将需要一个触发器,一个计时器或其他任何可以理解在正确的时间写入文件的东西,这就是“挑战”。 因此,每次读取条形码时都更容易写入文件,但是根据读取条形码的数量,每次写入/关闭文件时可能会遇到性能问题。 您也可以将条形码连接成一个字符串,并在所有读取之后将此字符串写入文件中。