Отправление текстового файла с Android

Что такой друзья, я разрабатываю приложение, которое производит текстовый файл (.txt) с многообразными линиями, полученными от BD, чтобы потом посылать через почту, проблема, - когда получается почта, и увидев файл в ПК, текст выходит в единственной линии, увидев тот же файл в мобильном телефоне, если у него есть разрыв линии.

Это код, который я использую, чтобы прилагать и сохранять в текстовом файле:

BufferedWriter fileWritter = new BufferedWriter(new FileWriter("/sdcard/arhivos/"+currentDate)); //ubicacion y nombre del archivo
while(c.moveToNext()){                               
  registros = String.format(codigoReloj + c.getString(0).toString() + c.getString(1).toString().replace("/", "") + c.getString(2).toString().replace(":", "")+"\n");
  fileWritter.append( registros );
  fileWritter.flush();
  registros = "";
}
fileWritter.close();

Это код, который я использую, чтобы посылать файл

Intent emailIntent = new Intent(Intent.ACTION_SEND);         
     emailIntent.setType("message/rfc822");
     emailIntent.setData(Uri.parse("mailto:"));
     emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
     emailIntent.putExtra(Intent.EXTRA_CC, cc);
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, asunto);
     emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje);
     emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+"/storage/sdcard0/archivos/"+ asunto)); 
     emailIntent.setType("text/plain"); //indicamos el tipo de dato      
     startActivity(Intent.createChooser(emailIntent, "Email "));

Уже я попробовал производить файл с:

writer.newLine();
System.getProperty("line.separator");
String.format("%n");

С этими выборами в мобильном телефоне увидены разрывы линий, после посылая это и видя файл в ПК, текст выходит в единственной линии.

8
задан 10.04.2017, 02:26
4 ответа

Этот кажется проблемой, связанной с различным представлением символа новой линии, зависимой от операционной системы. В соответствии с Новой линией - Wikipedia (совокупная эмфаза):

Различные представления новой линии в операционных системах иногда вызывают, что, перенеся файл между двумя компьютерами, он появился некорректно. Например, в нормальных условиях, файлы, созданные в системах Unix или Apple Макинтош будут видны длинной линией в Windows. И наоборот: файлы, созданные в компьютере с Windows окажутся странными с какими-то редакторами, так как дополнительный CR, в котором Unix не нуждается, появится как один ^M в конце каждой линии.

Типично символ новой линии представляется как:

  • \n = LF (Я прыгаю от линии) Использованный как символ новой линии в Unix.
  • \r = CR (Возврат каретки), Использованный как символ новой линии в Мак ВЫ.
  • \r\n = LF CR Использованный как символ новой линии в Windows и М ДВА.

Когда ты упоминаешь:

С этими выборами в мобильном телефоне увидены разрывы линий, после посылая это и видя файл в ПК, текст выходит в единственной линии.

Тогда, понимая, что из-за ПК ты имеешь в виду компьютер с Windows, символ новой линии, которую ты должен использовать, \r\n. В других словах:*

fileWritter.append(registros)
           .append("\r\n");

────────
* В этом маленьком примере, registros не будь должен содержать \r или \n. Рекомендует добавлять символ новой линии в независимом вызове в .append. Adicionalmente, также рекомендуется, чтобы улучшать результат, делать flush непосредственно перед закрыв инстанцию Writer.

4
ответ дан 01.12.2019, 08:12
  • 1
    Спасибо за твою помощь, он увидел этот c и # 243; я говорю, но он это применял плохо, я оставляю то, что я функция и # 243;. 'BufferedWriter fileWritter = new BufferedWriter (new FileWriter ("/sdcard/archivos / и quot; +currentDate)); while (c.moveToNext ()) {реестры = codigoReloj + c.getString (0) .toString () + c.getString (1) .toString () .replace (" / " " ") + c.getString (2) .toString () .replace (": " " "); fileWritter.append (реестры) .append (" \r\n"); реестры = " ";} fileWritter.flush (); fileWritter.close ();' – user2452784 06.01.2016, 07:16

Вы можете стараться использовать или использовать что-то сходное со следующим, может быть, было тем, что он ищет:

//..

String message = "Hola esto es<br/><br/>un test";

..//
emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje);
..//

.

//..

..//
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
                     Html.fromHtml("Hola esto es<br/><br/>un test"));
..//
0
ответ дан 01.12.2019, 08:12

Моя рекомендация состоит в том, чтобы ты всегда сохранял в формате разрыва линии Windows, так как Windows в linux он совместим, но это не так, если ты это сохраняешь в формате Linux.

С этим ты избежишь идти с преобразования данных до другой, просто сохраняй всегда в Windows формате.

Так или иначе с этим кодом ты можешь обращать Линии Linux в Линии Windows

public class LineConverter{

    //convierte a formato de línea de UNIX
    static String convertToUNIXNewlines(String value) 
    {
       return value.replace("\r\n", "\n");
    }


    //convierte a formato de línea de Windows
    static String convertToWindowsNewlines(String value)  
    {

      //llama al de UNIX para asegurarse de tener siempre 
      //el mismo formato
      value = convertToUNIXNewlines(value);
      return value.replace("\n", "\r\n");
    }

    public static void main(String[] args) 
    {
      String value = "Juan\nCarlos\nRuiz\r\nPacheco";
      String result = LineConverter.convertToWindowsNewlines(value);

      System.out.println(value);
      System.out.println(result);
    }
}

Выход:

Juan
Carlos
Ruiz
Pacheco
Juan
Carlos
Ruiz
Pacheco

Ты можешь тестировать это интерактивно здесь

0
ответ дан 01.12.2019, 08:12

Если ты хочешь добавить разрывы линии в тексте твоей электронной почты в случае Android (так как я вижу, ты используешь Intent), используется регулярно tag html line break <br>, который производит разрыв lГ-nea и возврата каретки (carriage-return). Вместо \n используй <br>, который tambiГ©n ты можешь добавлять в конце каждый lГ-nea, добавь это, реализовав вызов в .append ():

BufferedWriter fileWritter = new BufferedWriter(new FileWriter("/sdcard/arhivos/"+currentDate)); //ubicacion y nombre del archivo
while(c.moveToNext()){                               
  registros = String.format(codigoReloj + c.getString(0).toString() + c.getString(1).toString().replace("/", "") + c.getString(2).toString().replace(":", "")+"<br>");
  fileWritter.append(registros + "<br>");
  fileWritter.flush();
  registros = "";
}
fileWritter.close();

AsГ - послав электронную почту:

Intent emailIntent = new Intent(Intent.ACTION_SEND);         
     emailIntent.setType("message/rfc822");
     emailIntent.setData(Uri.parse("mailto:"));
     emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
     emailIntent.putExtra(Intent.EXTRA_CC, cc);
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, asunto);
     emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje);
     emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+"/storage/sdcard0/archivos/"+ asunto)); 
     emailIntent.setType("text/plain"); //indicamos el tipo de dato      
     startActivity(Intent.createChooser(emailIntent, "Email "));

и получать это в клиенте, твое сообщение сформируется с разрывами линии и не в одной lГ-nea, это изображение показывает как verГ - в текст в устройстве mГіvil или в персональном компьютере.

introducir la descripción de la imagen aquí

* важен сообщать, что какие-то Клиенты электронной почты выдают контент html.

0
ответ дан 01.12.2019, 08:12