Javaを使用してcsvファイルにデータを書き込もうとしていますが、生成されたファイルを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();
Csvファイルに印刷するために、Javaでライブラリを使用する必要がありますか?正しいフォーマットを使用していれば、Javaでネイティブにこれを行うことができると思いました。
ヘルプに感謝し、
ショー
基本的に、MS Excelがそのようなコンテンツを含むファイルを開く方法を決定できないためです。
スプレッドシートタイプファイルの最初の文字としてID
を指定すると、 SYLK ファイルの仕様に一致し、MS Excel(および場合によっては他のスプレッドシートアプリ)がそれを開こうとしますSYLKファイル。ただし、同時に、ファイル内の残りの値はコンマで区切られているため、SYLKファイルの完全な仕様を満たしていません。したがって、エラーが表示されます。
この問題を解決するには、"ID"
を"id"
に変更すると、期待どおりに動作するはずです。
これは変です。しかし、ええ!
また、ファイルオブジェクトlessを使用してファイルアクセスを最小限にしようとしています。
私はテストし、以下のコードは完璧に動作します。
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());
}
}
}
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!");
}
}
これは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.");
}
}
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();