package com.example.moviecli.command; import com.example.moviecli.model.Movie; import com.example.moviecli.repository.MovieRepository; import com.example.moviecli.view.ConsoleView; import com.example.moviecli.exception.SaveFailedException; import com.opencsv.CSVWriter; import java.io.FileWriter; import java.util.List; public class ExportCommand implements Command { private final ConsoleView view; public ExportCommand(ConsoleView view) { this.view = view; } @Override public String getName() { return "export"; } @Override public void execute(String[] args, MovieRepository repository) { List movies = repository.getAll(); if (movies.isEmpty()) { view.printError("没有数据可导出。"); return; } try (CSVWriter writer = new CSVWriter(new FileWriter("movies.csv"))) { String[] header = {"Rank", "Title", "OriginalTitle", "Score", "Year", "Director"}; writer.writeNext(header); for (Movie m : movies) { String[] line = { String.valueOf(m.getRank()), m.getTitle(), m.getOriginalTitle(), m.getScore(), m.getYear(), m.getDirector() }; writer.writeNext(line); } view.printSuccess("导出成功:movies.csv"); } catch (Exception e) { // 使用自定义异常包装原始异常 SaveFailedException ex = new SaveFailedException("导出CSV文件失败", e); view.printError(ex.getMessage()); ex.printStackTrace(); // 打印堆栈,体现使用了自定义异常 } } }