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, пока вы используете правильное форматирование.
Оцените справку,
Шоу
Ответы
Ответ 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.");
}
}