자바로 파일변환 및 쿼리문 txt생성!

2021. 9. 15. 14:55DB이관

반응형

##기존에 다른 동료가 하는 프로젝트에서 DB를 부분이관을 진행했는데 파일다운로드에 오류가 발생했다..

알고봤더니 기존로직은 리눅스 서버에 파일업로드를 할 경우 한글파일이든 영어든 모두 임시의 값으로 변환되어 서버에 저장이되는데(ex 보통 안겹치기위해 날짜+randomString->20210915_abcdefg 와 같은형태) 한글로 가져와서 한글파일을 못찾는 사태가 발생했다.

모두가 그런게 아니고 새로 가져온부분만 안되기때문에 한글에대한 설정을 서버에 맞춰서 해보기보단 기존껄 자바에서 재 가공해서 넣기로함.

특정 폴더에 있는 파일만 오류를 발생시켰으므로 그 폴더에 있는파일 데이터만 Java에서 뽑아내고

<select id="fileTestListByFolder" resultType="java.util.HashMap">
		SELECT
			*
		FROM
			table
		WHERE
			DELETE_YN = 'N'
		AND FILE_FOLDER LIKE '%/admin_upload%'
</select>

 

##수행로직##

컨트롤러를 임시로 태워서 해당 주소로 들어갔을경우 자동으로 for문을 돌아 원하는 형태의 쿼리문을 만들어주도록하여 가져가서 테스트를 진행했다!!

@RestController
public class fileTestController {

	@Resource(name="fileTestMapper")
	FileTestMapper fileTestMapper;

	@RequestMapping("/file/test")
	public String fileTest() throws SQLException, IOException{
		//바꿀파일이름 형식 년월일+for문 i의 숫자 ex) 2021813_0~~~2021813_570까지
		Calendar cal = Calendar.getInstance();
		//오늘날짜 지정
		String year = cal.get(cal.YEAR)+""; //년
		String month = cal.get(cal.MONTH)+1+""; //월
		String day = cal.get(cal.DATE)+""; //일
		String madeDate= year+month+day+"_";

		List<HashMap<String,String>> list = fileTestMapper.fileTestListByFolder();

		StringBuffer sb = new StringBuffer();
		StringBuffer sb2 = new StringBuffer();
		//HashMap이라 중복되는 것 제거되버림
		for(int i=0; i<list.size(); i++){
			String FILE_ID = list.get(i).get("FILE_ID");
			String FILE_NAME = list.get(i).get("FILE_NAME");
			//String FILE_MASK = list.get(i).get("FILE_MASK");
			String FILE_MASK = madeDate+Integer.toString(i);
			System.out.println(i);
			//생성해야하는 업데이트문 예시 UPDATE FROM table SET FILE_MASK = '' WHERE FILE_NAME='';
			sb.append("UPDATE KHOME.J_ATTACHFILE SET FILE_MASK ='");
			sb.append(FILE_MASK+"' ");
			sb.append("WHERE FILE_NAME ='");
			sb.append(FILE_NAME+"' ");
			sb.append("AND FILE_ID ='");
			sb.append(FILE_ID+"'");
			sb.append(";");
			sb.append("\r\n");

			//생성해야하는 업데이트문 예시 UPDATE FROM table SET FILE_MASK = '' WHERE FILE_ID='';
			sb2.append("UPDATE KHOME.T_BOARD SET BD_EXT1 ='/admin_upload/");
			sb2.append(FILE_MASK+"' ");
			sb2.append("WHERE BD_EXT2 ='");
			sb2.append(FILE_NAME+"' ");
			sb2.append("AND FILE_ID ='");
			sb2.append(FILE_ID+"'");
			sb2.append(";");
			sb2.append("\r\n");
			//파일변환처리
			renameFile(FILE_NAME, FILE_MASK);


		}

		//쿼리저장용 텍스트파일 경로
		  String filePath = "C:\\adminuploadquery\\filequery.txt";
		FileWriter fileWriter = new FileWriter(filePath);
		   fileWriter.write(sb.toString());
		   fileWriter.close();
		   String filePath2 = "C:\\adminuploadquery\\boardquery.txt";
		   FileWriter fileWriter2 = new FileWriter(filePath2);
		   fileWriter2.write(sb2.toString());
		   fileWriter2.close();

		return "테스트용 URL";
	}

	//파일 이름 변경 메서드
	public void renameFile(String filename, String newFilename) {

		//읽을파일 경로
		String path = "C:\\adminupload\\";
		//읽을파일 이름
		String filename1 = path+filename;
		//바꿀파일 저장경로
		String path2 = "C:\\adminupload\\changed\\";
		//바굴파일 이름
		String filename2 = path2+newFilename;


	    File file = new File( filename1 );
	    File fileNew = new File( filename2 );
	    if( file.exists() ) file.renameTo( fileNew );
	}
}
반응형