I am trying to write data to a csv file with java, however when I try opening the produced file with excel I am getting an error saying the file is corrupt. Upon opening the file in notepad it looks to be formatted correctly so I'm not sure what the issue is. I am using the FileWriter class to output the data to the file.
```
FileWriter writer = new FileWriter("test.csv");
writer.append("ID");
writer.append(',');
writer.append("name");
writer.append(',');
...
writer.append('\n');
writer.flush();
writer.close();
```
Do I need to use some library in java in order to print to a csv file? I presumed you could just do this natively in java as long as you used the correct formatting.
Appreciate the help,
Shaw
CSV fichier avec "ID" as first item is corrupt in Excel
Re: CSV fichier avec "ID" as first item is corrupt in Excel
It's because MS Excel can't decide how to open the file with such content.
**To solve the issue, replace `"ID"` with `"id"`.**
When you have `ID` as the first word in a SpreadSheet type file, it matches the specification of a [SYLK](https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)) file and MS Excel (and potentially other SpreadSheet Apps) attempts to open as a SYLK file. However, it does not meet the complete specification of a SYLK file since rest of the values in the file are comma separated. Hence, the error is shown.
id
Name
1
Jon Doe
2
Jane Doe
As a bonus, trying to minimize file access by using file object less.
I tested and the code below should work.
```
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("test.csv")) {
StringBuilder sb = new StringBuilder();
sb.append("id");
sb.append(',');
sb.append("Name");
sb.append('\n');
sb.append("1");
sb.append(',');
sb.append("Jon Doe");
sb.append('\n');
sb.append("2");
sb.append(',');
sb.append("Jane Doe");
sb.append('\n');
writer.write(sb.toString());
System.out.println("write success.");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
```
**To solve the issue, replace `"ID"` with `"id"`.**
When you have `ID` as the first word in a SpreadSheet type file, it matches the specification of a [SYLK](https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)) file and MS Excel (and potentially other SpreadSheet Apps) attempts to open as a SYLK file. However, it does not meet the complete specification of a SYLK file since rest of the values in the file are comma separated. Hence, the error is shown.
id
Name
1
Jon Doe
2
Jane Doe
As a bonus, trying to minimize file access by using file object less.
I tested and the code below should work.
```
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("test.csv")) {
StringBuilder sb = new StringBuilder();
sb.append("id");
sb.append(',');
sb.append("Name");
sb.append('\n');
sb.append("1");
sb.append(',');
sb.append("Jon Doe");
sb.append('\n');
sb.append("2");
sb.append(',');
sb.append("Jane Doe");
sb.append('\n');
writer.write(sb.toString());
System.out.println("write success.");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
```