웹에서 Javascript 만으로 텍스트 파일 생성

웹에서 스크립트만으로 텍스트 파일을 생성하기 위한 코드를 정리한다. 주로 사용하는 웹브라우져가 IE와 Chrome인데, 텍스트 파일을 생성하는 방식이 서로 다르다. 먼저 크롬의 경우에는 아래와 같다.

function saveToFile_Chrome(fileName, content) {
    var blob = new Blob([content], { type: 'text/plain' });

    objURL = window.URL.createObjectURL(blob);
            
    // 이전에 생성된 메모리 해제
    if (window.__Xr_objURL_forCreatingFile__) {
        window.URL.revokeObjectURL(window.__Xr_objURL_forCreatingFile__);
    }
    window.__Xr_objURL_forCreatingFile__ = objURL;

    var a = document.createElement('a');

    a.download = fileName;
    a.href = objURL;
    a.click();
}

다음은 IE에서 작동하는 코드이다.

function saveToFile_IE(fileName, content) {
    var blob = new Blob([content], { type: "text/plain", endings: "native" });

    window.navigator.msSaveBlob(blob, fileName);
    //window.navigator.msSaveOrOpenBlob(blob, fileName);
}

아래는 현재 사용하는 웹브라우저가 IE인지를 식별하는 함수이다.

function isIE() {
    return (navigator.appName === 'Netscape' && navigator.userAgent.search('Trident') !== -1) ||
        navigator.userAgent.toLowerCase().indexOf("msie") !== -1;
}

[Java] 원하는 시간에 원하는 기능을 실행해 주는 Scheduler 라이브러리, Quartz v2.2.3

원하는 시간에 원하는 기능을 실행해 주는 스케줄러 기능을 Java에서 실행하기 위해서 가장 많이 사용되는 라이브러리가 Quartz입니다. Quartz는 기능을 안정적으로 실행할 수 있다는 장점과 함께, 특히 실행할 시간을 매우 유연하게 지정할 수 있습니다.

아래의 코드는 매 순간의 시간이 5초일때(5초마다가 아님) 특정한 기능, 즉 Job을 실행해 주는 코드입니다.

package quartz;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class MainEntry {
    public static void main(String[] args) {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		
        try {
            Scheduler scheduler = schedulerFactory.getScheduler();
			
            JobDetail job = newJob(TestJob.class)
                .withIdentity("jobName", Scheduler.DEFAULT_GROUP)
                .build();
			
            Trigger trigger = newTrigger()
                .withIdentity("trggerName", Scheduler.DEFAULT_GROUP)
                .withSchedule(cronSchedule("5 * * * * ?"))
                .build();
						
            scheduler.scheduleJob(job, trigger);
            scheduler.start();
        } catch(Exception e) {
            e.printStackTrace();
        }		
    }
}

26번째 코드를 보면 cronSchedule 함수를 통해 Job을 실행할 시간을 정하고 있습니다. 시간을 정하는 방식을 5 * * * * ?인데요. 순서대로 초 분 시 일 월 요일 년도(옵션)입니다. 즉 초를 5로 하고 나머지에 대해서는 * 또는 ?로 지정함으로써 매순간의 시간이 5초일때 Job을 실행하게 됩니다. 그럼, 실행할 Job은 어떻게 지정할까요? 20번 코드의 newJob 함수를 통해 지정하고 있습니다. Job으로 TestJob을 사용하고 있는데.. 이 TestJob의 코드는 아래와 같습니다.

package quartz;

import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class TestJob implements Job {
    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println("Job Executed [" + new Date(System.currentTimeMillis()) + "]"); 
    }
}

위의 예에서는 간단히 Job이 실행되는 시간과 Job Executed라는 문자열을 표시하는 일만 합니다.

Quartz 라이브러리는 http://www.quartz-scheduler.org/downloads 에서 받을 수 있으며, 다운로드 받은 jar 중 최소한 quartz-{version}.jar와 slf4j-api-{version}.jar를 참조해줘야 합니다.