Java로 프로그래밍 클래스를 작성한 지 1 년이 넘었습니다. CSV 파일을 생성하고 생성 된 사용자의 입력을 추가 할 수있는 기본적인 식품 로그 콘솔 애플리케이션입니다. 나는 결코 해결할 수 없었던 문제에 부딪쳤다. 한동안 프로그래밍을 많이 해본 적은 없지만 솔루션에 대해 궁금합니다. 문제는 프로그램이 실행될 때마다 CSV에 다른 헤더를 삽입한다는 것입니다. 초기 생성시에만 삽입하고, 파일이 이미 있으면 건너 뛸 수 있습니다.프로그램을 실행할 때마다 CSV 파일에 헤더가 추가됩니다.
내 초기 생각은 else if (file.exists() == true) {remaining code block}; 'try'블록에 있지만 헤더를 전혀 쓰지 않습니다.
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class FoodLogWriter {
private static final String COMMA_DELIMITER = ",";
private static final String NEW_LINE_SEPARATOR = "\n";
private static final String FILE_HEADER = "Date,Food Time,Food Item,Calories,Carbohydrates,Sugar,Protein,Fiber,Total Fat";
private static Scanner kb;
public static void writeFoodLog(String fileName, File file) throws IOException {
List<FoodLog> list = new ArrayList<FoodLog>();
FoodLogApp app = new FoodLogApp();
kb = new Scanner(System.in);
String Dinput;
String FTinput;
String FIinput;
double CALinput;
double CARBinput;
double Sinput;
double Pinput;
double TFinput;
double Finput;
int i = 0;
while (i < 1000) {
System.out.print("Enter the date: ");
Dinput = kb.next();
System.out.print("Enter the food time: ");
FTinput = kb.next();
System.out.print("Enter the food item: ");
FIinput = kb.next();
System.out.print("Enter the calories: ");
CALinput = kb.nextDouble();
System.out.print("Enter the carbohydrates: ");
CARBinput = kb.nextDouble();
System.out.print("Enter the sugar: ");
Sinput = kb.nextDouble();
System.out.print("Enter the protein: ");
Pinput = kb.nextDouble();
System.out.print("Enter the fiber: ");
Finput = kb.nextDouble();
System.out.print("Enter the total fat: ");
TFinput = kb.nextDouble();
list.add(app.createFoodLog(Dinput, FTinput, FIinput, CALinput, CARBinput, Sinput, Pinput, Finput, TFinput));
System.out.println("");
System.out.print("Do you have another item to input? ");
String response = kb.next();
System.out.println("");
if (response.equalsIgnoreCase("no")) {
app.printFoodLog(list);
break;
} else {
i++;
}
kb.nextLine();
}
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(fileName, true);
if (file.exists() == false) {
fileWriter.write(FILE_HEADER.toString());
}
fileWriter.append(NEW_LINE_SEPARATOR);
for (FoodLog FL : list) {
fileWriter.append(String.valueOf(FL.getDate()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getFoodTime()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getFoodItem()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getCalories()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getCarbohydrates()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getSugar()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getProtein()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getFiber()));
fileWriter.append(COMMA_DELIMITER);
fileWriter.append(String.valueOf(FL.getTotalFat()));
fileWriter.append(NEW_LINE_SEPARATOR);
}
System.out.println("CSV file was created successfully.");
} catch (Exception e) {
System.out.println("Error in FoodLogWriter.");
e.printStackTrace();
} finally {
try {
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
System.out.println("Error while flushing/closing file writer.");
e.printStackTrace();
}
}
}
} 여기
:
나는 당신이 단지 순서를 변경하고 같은 변수를 사용하는 것이 좋습니다. –