notice Java 34

change



-------------------------------------------------
public class FileExportService {

	private FileExportProperty fileExportProperty;
	private OyaTable oyaTable;

	public FileExportService(FileExportProperty fileExportProperty, OyaTable oyaTable) {
		this.fileExportProperty = fileExportProperty;
		this.oyaTable = oyaTable;
	}

	public void run() {
		//SqlSession取得

		CsvDirs dirs = null;
		try {
			String yyyyMMddhhmmss = null;
			SimpleDateFormat df = new SimpleDateFormat("yyyymmddhhmmssSSS");
			yyyyMMddhhmmss = df.format(new Date());
			dirs = new CsvDirs(fileExportProperty, oyaTable, yyyyMMddhhmmss);

			//IbsTr001取得
			List<IbsTr001> list001 = new ArrayList<>();
			IbsTr001 ibsTr001 = new IbsTr001("100111", "100111名前", "090-1111-0001", "住所111", "1988/03/01");
			list001.add(ibsTr001);
			IbsTr001 ibsTr002 = new IbsTr001("100112", "100112名前", "090-1111-0002", "住所112", "1988/05/01");
			list001.add(ibsTr002);
			IbsTr001 ibsTr003 = new IbsTr001("100113", "100113名前", "090-1111-0003", "住所113", "1988/07/01");
			list001.add(ibsTr003);
			if (list001.isEmpty()) {
				if (!dirs.isIryoFileExists()) {
					dirs.deleteIryoDir();
					System.out.println("dirs.deleteIryoDir() " + yyyyMMddhhmmss);
				}
				System.out.println("[XXX]XXX001データがありませんでした");
			} else {
				//String dir = String.join(File.separator, fileExportProperty.getIryoDir(), "TEST_DATA", yyyyMMddhhmmss);
				//mkdirs(dir);

				writeIbsTr001Csv(list001, dirs.getIryoDir());
				//IbsTr001更新
				System.out.println("[XXX]XXX001データがあり" + yyyyMMddhhmmss);
			}
			if (true) throw new RuntimeException("xxx");

			if (dirs.isIryoFileExists()) {
				writeEnd(dirs.getIryoDir(), oyaTable.getCode_id(), "I" + yyyyMMddhhmmss);
				System.out.println("[XXX]XXX001医療費のENDファイルを作成しました" + yyyyMMddhhmmss);
			}else {
				dirs.deleteIryoDir();
				System.out.println("[XXX]XXX001医療費データを削除しました" + yyyyMMddhhmmss);
			}
			if (dirs.isKensinFileExists()) {
				writeEnd(dirs.getKensinDir(), oyaTable.getCode_id(), "I" + yyyyMMddhhmmss);
				System.out.println("[XXX]XXX001検診結果のENDファイルを作成しました" + yyyyMMddhhmmss);
			}else {
				dirs.deleteKensinDir();
				System.out.println("[XXX]XXX001検診結果データを削除しました" + yyyyMMddhhmmss);
			}
			//commit
		} catch (Exception ex) {
			ex.printStackTrace();
			//rollbacks
			System.out.println("onFailure");
			System.out.println("onFailure " + ex.toString());
			System.out.println("log3j " + getStackTrace(ex));
			onFailure(dirs);
		}
	}

	private String getStackTrace(Exception e) {
		StringWriter sw = new StringWriter();
		e.printStackTrace(new PrintWriter(sw));
		return sw.toString();
	}

	//IbsTr001用CSV出力
	private void writeIbsTr001Csv(List<IbsTr001> list, File dir) throws Exception {
		//		mkdirs(dir);
		//		if (!new File(dir).exists()) {
		//			new File(dir).mkdirs();
		//		}
		File file = new File(dir, "IbsTr001.csv");
		try {
			writeCsv(file, list, IbsTr001.FIELDS);
			System.out.println("[XXX]XXX001作成に成功しました");
		} catch (Exception e) {
			System.out.println("異常終了[XXX]XXX001作成に失敗しました");
			throw e;
		}
	}

	private void writeEnd(File dir, String contents, String filename) throws IOException {
		File file = new File(dir, filename);
		try (PrintWriter pw = getWriter(file)) {
			pw.println(contents);
		}
	}

	//CSVファイル出力
	private int writeCsv(File file, List<?> list, String[] fields) throws IOException {
		try (PrintWriter pw = getWriter(file)) {
			pw.println(String.join(",", getHeader(fields)));
			for (Object row : list) {
				pw.println(String.join(",", getValues(fields, row)));
			}
		}
		return list.size();
	}

	//ライター取得
	private PrintWriter getWriter(File file) throws IOException {
		FileOutputStream fos = new FileOutputStream(file);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
		PrintWriter pw = new PrintWriter(bw);
		return pw;
	}

	//ヘッダ行を取得する
	private String[] getHeader(String[] fields) {
		return Arrays.stream(fields).map(String::toUpperCase).toArray(String[]::new);
	}

	//指定フィールド値を取得する
	private String[] getValues(String[] fields, Object obj) {
		Class<?> clazz = obj.getClass();
		List<String> values = new ArrayList<>();
		for (String field : fields) {
			try {
				Field f = clazz.getDeclaredField(field.toLowerCase());
				f.setAccessible(true);
				values.add(Objects.toString(f.get(obj), ""));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return values.toArray(new String[values.size()]);
	}

	private void onFailure(CsvDirs dirs) {
		if (dirs != null) {
			dirs.deleteDirs();
		}
	}

	private static class CsvDirs {
		private File iryoDir;
		private File kensinDir;

		private CsvDirs(FileExportProperty fileExportProperty, OyaTable oyaTable, String yyyyMMddhhmmss) {
			this.iryoDir = getDir(fileExportProperty.getIryoDir(), oyaTable, yyyyMMddhhmmss);
			this.kensinDir = getDir(fileExportProperty.getKensinDir(), oyaTable, yyyyMMddhhmmss);
		}

		private File getDir(String baseDir, OyaTable oyaTable, String yyyyMMddhhmmss) {
			return mkdirs(String.join(File.separator, baseDir, "TEST_DATA", oyaTable.getBunrui(), yyyyMMddhhmmss));
		}

		public File getIryoDir() {
			return iryoDir;
		}

		public File getKensinDir() {
			return kensinDir;
		}

		public boolean isIryoFileExists() {
			return iryoDir.listFiles().length > 0;
		}

		public boolean isKensinFileExists() {
			return kensinDir.listFiles().length > 0;
		}

		public void deleteDirs() {
			deleteIryoDir();
			deleteKensinDir();
		}

		public void deleteIryoDir() {
			deleteDir(this.iryoDir);
		}

		public void deleteKensinDir() {
			deleteDir(this.kensinDir);
		}

		private void deleteDir(File dir) {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					deleteDir(file);
				}
				file.delete();
			}
			dir.delete();
		}

		private File mkdirs(String strDir) {
			File dir = new File(strDir);
			if (!dir.exists())
				dir.mkdirs();
			return dir;
		}
	}
-------------------------------------------------