You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.8 KiB
52 lines
1.8 KiB
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<Movie> 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(); // 打印堆栈,体现使用了自定义异常
|
|
}
|
|
}
|
|
}
|