Подтвердить что ты не робот

Java - запись строк в файл CSV

Я пытаюсь записать данные в файл csv с помощью java, однако, когда я пытаюсь открыть созданный файл с помощью excel, я получаю сообщение об ошибке, когда файл поврежден. Открыв файл в блокноте, он выглядит правильно отформатированным, поэтому я не уверен, в чем проблема. Я использую класс FileWriter для вывода данных в файл.

FileWriter writer = new FileWriter("test.csv");

writer.append("ID");
writer.append(',');
writer.append("name");
writer.append(',');
...
writer.append('\n');

writer.flush();
writer.close();

Нужно ли использовать некоторую библиотеку в java для печати в файл csv? Я предположил, что вы можете просто сделать это изначально в java, пока вы используете правильное форматирование.

Оцените справку,

Шоу

4b9b3361

Ответ 1

В основном это потому, что MS Excel не может решить, как открыть файл с таким содержимым.

Когда вы вводите ID в качестве первого символа в файле типа электронной таблицы, он совпадает со спецификацией файла SYLK, и MS Excel (и, возможно, другие приложения электронной таблицы) пытается открыть его как файл SYLK. Но в то же время он не соответствует полной спецификации файла SYLK, поскольку остальные значения в файле разделены запятыми. Следовательно, ошибка показана.

Чтобы решить эту проблему, измените "ID" на "id" и он должен работать как положено.

enter image description here

Это странно Но да!

Также стараемся свести к минимуму доступ к файлу, используя меньше файловый объект.

Я проверил, и код ниже работает отлично.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class CsvWriter {
  public static void main(String[] args) {

    try (PrintWriter writer = new PrintWriter(new File("test.csv"))) {

      StringBuilder sb = new StringBuilder();
      sb.append("id,");
      sb.append(',');
      sb.append("Name");
      sb.append('\n');

      sb.append("1");
      sb.append(',');
      sb.append("Prashant Ghimire");
      sb.append('\n');

      writer.write(sb.toString());

      System.out.println("done!");

    } catch (FileNotFoundException e) {
      System.out.println(e.getMessage());
    }

  }
}

Ответ 2

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class CsvFile {


public static void main(String[]args){
PrintWriter pw = null;
try {
    pw = new PrintWriter(new File("NewData.csv"));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
StringBuilder builder = new StringBuilder();
String ColumnNamesList = "Id,Name";
// No need give the headers Like: id, Name on builder.append
builder.append(ColumnNamesList +"\n");
builder.append("1"+",");
builder.append("Chola");
builder.append('\n');
pw.write(builder.toString());
pw.close();
System.out.println("done!");
}
}

Ответ 3

    String filepath="/tmp/employee.csv";
    FileWriter sw = new FileWriter(new File(filepath));
    CSVWriter writer = new CSVWriter(sw);
    writer.writeAll(allRows);

    String[] header= new String[]{"ErrorMessage"};
    writer.writeNext(header);

    List<String[]> errorData = new ArrayList<String[]>();
    for(int i=0;i<1;i++){
        String[] data = new String[]{"ErrorMessage"+i};
        errorData.add(data);
    }
    writer.writeAll(errorData);

    writer.close();

Ответ 4

Я думаю, что это простой код в Java, который покажет строковое значение в CSV после компиляции этого кода.

public class CsvWriter {

    public static void main(String args[]) {
        // File input path
        System.out.println("Starting....");
        File file = new File("/home/Desktop/test/output.csv");
        try {
            FileWriter output = new FileWriter(file);
            CSVWriter write = new CSVWriter(output);

            // Header column value
            String[] header = { "ID", "Name", "Address", "Phone Number" };
            write.writeNext(header);
            // Value
            String[] data1 = { "1", "First Name", "Address1", "12345" };
            write.writeNext(data1);
            String[] data2 = { "2", "Second Name", "Address2", "123456" };
            write.writeNext(data2);
            String[] data3 = { "3", "Third Name", "Address3", "1234567" };
            write.writeNext(data3);
            write.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();

        }

        System.out.println("End.");

    }
}