web-dev-qa-db-ja.com

Java-文字列をCSVファイルに書き込む

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でネイティブにこれを行うことができると思いました。

ヘルプに感謝し、

ショー

34
Shaw

基本的に、MS Excelがそのようなコンテンツを含むファイルを開く方法を決定できないためです。

スプレッドシートタイプファイルの最初の文字としてIDを指定すると、 SYLK ファイルの仕様に一致し、MS Excel(および場合によっては他のスプレッドシートアプリ)がそれを開こうとしますSYLKファイル。ただし、同時に、ファイル内の残りの値はコンマで区切られているため、SYLKファイルの完全な仕様を満たしていません。したがって、エラーが表示されます。

この問題を解決するには、"ID""id"に変更すると、期待どおりに動作するはずです。

enter image description here

これは変です。しかし、ええ!

また、ファイルオブジェクト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());
    }

  }
}
80
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!");
}
}
9

これは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.");

    }
}
2
Samim Aktar
    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();
0
Somuchandra