매번 리눅스에 자바를 설치하는 법을 알려 드리다가 이번 글에서는 윈도우즈에 자바를 설치하는 법을 알려 드리겠습니다. 

 

우선 OpenJDK라는 놈을 왜 쓰는지를 아셔야 해서 

 

LINE의 OpenJDK 적용기: 호환성 확인부터 주의 사항까지 - LINE ENGINEERING (linecorp.com)

 

LINE의 OpenJDK 적용기: 호환성 확인부터 주의 사항까지 - LINE ENGINEERING

2018년 오라클의 라이선스 체계가 변경되면서 2019년 1월 이후 더 이상 무료로 Oracle JDK를 사용할 수 없게 되었습니다. 이에 LINE 내부에서는 사전에 OpenJDK를 적용하기 위해 필요한 사항이나 검토 항

engineering.linecorp.com

제가 설명 드리는 것보다 위 글을 읽고 오시면 될 것 같습니다. 

 

간략하게 말씀 드리면 Oracle JDK를 쓰면 돈을 받습니다. 

 

해당 비용을 안내기위해서는 Oracle JDK 말고 Open JDK를 사용하셔야 하고 호환성도 거의 없다 라는 이야기를 위 사이트에서 하고 있습니다. 

 

그래도 개발자셔도 좀 더 이해는 하고 계셔야 하기에 위 글은 한번 읽어 보시고 오는 편이 좋습니다. 

 

오늘 설치하려고 하는 OpenJDK에 대한 설명은 OpenJDK (java.net) 에서 찾으실 수 있습니다. 

 

하지만, 저도 한참 해맨 것이 위 사이트에서 그야말로 설명만 제공 합니다. 

 

JDK Builds from Oracle (java.net)실제로 다운로드는 이 사이트에서 제공하고 있습니다. 

 

JDK 13 Releases (java.net) 이 사이트에서 OpenJDK 13을 받으실 수 있습니다. 

 

그런데 최신 버전은 15이고 개발 버전이 16 17이어서 서비스가 만료 되었다고 나옵니다. 

 

하지만, 저는 13버전을 사용하고 있습니다. 심지어 8이나 10도 사용하고 있습니다. 

 

저도 지금 예전 개발 환경과 호환성을 찾아야 하는데, 설치해놓고 볼 생각 입니다. 

 

해당 내용은 다른 글에서 안내해 드리고 오늘은 설치에 관한 글만 적도록 하겠습니다. 

 

Archived OpenJDK GA Releases (java.net)

 

Archived OpenJDK GA Releases

Archived OpenJDK General-Availability Releases This page is an archive of previously released builds of the JDK licensed under the GNU General Public License, version 2, with Classpath Exception. WARNING: These older versions of the JDK are provided to he

jdk.java.net

실제 다운로드는 위 사이트에서 받으셔야 합니다. 

 

 

13 버전을 받으시려면 위 사이트에서  위 그림과 비슷한 곳을 찾으십시오.

 

그리고 저기 zip 를 클릭 합니다. 

 

적당한 폴더에 다운로드 하시면 됩니다. 

 

저는 Downloads에 다운로드를 진행 했습니다. 

 

 

오른쪽 마우스 누르시고 압축을 푸시거나, 압축 프로그램을 이용해서 압축을 푸십시오.

 

이렇게 압축이 풀립니다. 그러면 저 파일을 적당한 위치로 이동시켜야 합니다. 

 

저는 보통 개발 환경을 만들때, C:\에 dev 폴더를 만들고, 해당 내용들을 집어 넣습니다. 

 

이번에도 그렇게 진행하겠습니다. 

 

적당한 곳에 영어로 프로그램을 설치하실때는 되도록이면 폴더를 영어로 만드십시오.

 

방금 압축 푼 파일을 이동 시킵니다. 

 

Ctrl + X 또는 오른쪽 마우스 누르시고, 잘라내기 하신 다음에

 

c:\dev 또는 생성하신 폴더에 가서 

 

Ctrl + V 또는 오른쪽 마우스 누르시고 붙여 넣기를 하시면 됩니다. 

 

 

이렇게 이동 된 것을 확인 할 수 있습니다. 

 

이제 JAVA_HOME 과 PATH를 설정해야 합니다. 

 

그래서 윈도우즈 + E 키를 누르시거나, 현재 열려 있는 탐색기 또는 탐색기를 여십시오.

 

내PC 또는 내컴퓨터에서 오른쪽 마우스 누르시고 속성을 누르십시오.

 

저기서 고급 시스템 설정을 클릭 하십시오.

 

 

저기서 환경변수를 클릭 하십시오.

 

저기서 새로만들기를 클릭 하십시오.

 

JAVA_HOME 라고 변수 이름을 만드시고, 변수 값아래에 디렉토리 찾아 보기를 선택하셔서 아까 이동하셨던 폴더를 선택 하십시오. 보통은 jdk버전입니다만, 다르게 하셨다면 해당 폴더를 선택 하시면 됩니다. 

 

그리고 확인을 눌러 주시면

 

위와 같이 나오면 정상입니다. 

 

이번에는 저기 보이는 Path를 더블 클릭 하시거나 Path를 선택하고, 편집을 클릭 하십시오

 

저는 환경변수에 보이는데 안보이시면, 스크롤을 이동시키면 활용 가능합니다. 

 

여기서 새로 만들기를 클릭하십시오.

 

위 그림 처럼 %JAVA_HOME%\bin 이라고 입력하시고 확인 누르시면 됩니다. 

 

찾아보기로 찾아서 bin 까지 넣어 주셔도 되지만, 

 

다음에 JAVA_HOME 바귀면, JAVA_HOME 만 변경하면 되도록 설정한 것입니다. 

 

그리고 확인 버튼을 누르셔서 모든 화면을 닫아 주십시오. 

 

다 닫으셨으면 설치가 되었는지 확인 합니다. 

 

윈도우즈 키 + R 을 치시거나, 윈도키만 누르신 다음에 cmd 를 치십시오.

 

요렇게 나올껍니다. 

 

커맨드 창이라고 쓰고 도스창이라고 읽습니다. ㅋㅋㅋ 

 

커맨드 창에서

 

javac -version 

 

java -version

 

두가지 명령을 실행했을때 위와 같이 나오면 정상적으로 설치 된 것입니다. 

 

파일 또는 커맨드가 없다던지 뭐 이런 오류가 나면 Path 설정을 잘 못하신 겁니다. 

 

혹시나 질문 있으시면 댓글 달아 주시면, 답변 드리겠습니다. 

 

감사합니다. 

 

 

 

 

Tomcat은 Apache 재단의 프로젝트에서 시작된 서블릿 컨테이너 제품입니다.

서블릿은 Java로 짜여진 일종의 클래스 파일 입니다.

위 클래스 파일을 서비스하기 위해서 개발된 오픈소스 서블릿 컨텐이너 입니다.

그런데 서블릿 컨테이너라고 쓰고, WAS(Web Application Server) 라고 읽습니다.

어차피 관리 적인 측면외에 하는일은 비슷합니다.

저둘의 차이가 있는 것은 알지만, 따지진 말아 주십시오 ^^

그래서 Tomcat을 설치하시려면, 저게 위에서 말씀 드렸듯이 Java가 필요 합니다.

그래서 Java를 먼저 설치하고 시작 해야 합니다.

Java 설치는 제 지난 번 글에 있습니다. ^^

ymmedia.tistory.com/196

위 글에 Ubuntu Linux에 OpenJDK를 설치하는 법을 적어 두었습니다.

설치는 저기 가서 하고 오십시오 ^^

이제 실제로 Tomcat 8을 설치해보도록 하겠습니다.

https://tomcat.apache.org/download-80.cgi

위홈페이지에 접속하신 후 최신 버전을 받으십시오.

설치하시고 싶은 디렉토리로 이동 하십시오.

wget https://downloads.apache.org/tomcat/tomcat-8/v8.5.59/bin/apache-tomcat-8.5.59.tar.gz

8점대 안정 버전 입니다.

보안 문제 때문에 8.5.50 이상을 설치 권장합니다.

다운로들 받기 시작 할 것입니다.

tar xzvfp apache-tomcat-8.5.60.tar.gz

cd apache-tomcat-8.5.60

cd bin

./startup.sh

http://ip주소 또는 도메인:8080 으로 접속 여부 확인 합니다.

이제 다시 Shell로 이동하셔서

tomcat을 종료 합니다.

./shutdown.sh

이제 Ubuntu Linux에 톰캣도 설치 되었습니다.

다음에 또 여러가지를 설치 해보도록 하겠습니다.

감사합니다.

Ubuntu에 접속 하시거나, 화면에 바로 들어기신 다음에.

 

java 

 

엔터를 처보십시오.

 

우분투 정말 친절 하군요.

 

java 사용할 수있는 당야한 방법이 저게 나옵니다. 

 

우리는 

 

```

sudo apt-get install openjdk-8-jre-headless

```

 

라고 치겠습니다. ^^

 

그럼 글자가 쭉 올라가면서 설치가 진행 될 것입니다. 

 

java 엔터 치시거나

 

java -version 엔터 치시면 위 그림과 같이 나오면 설치가 완료 된 것입니다. 

 

저는 위에서 JDK 즉 Java Development Kit 를 설치한다고 했습니다. 

 

그래서 이번에는 

 

javac라고 쳐 보십시오.

 

앞에서 처럼 친절하게 알려 줍니다. 

 

```

sudo apt-get install openjdk-8-jdk-headless

```

 

중간에 jre 대신에 jdk를 넣어 주시면 됩니다. 

 

저도 설치하고 있습니다. 

 

잘따라오고 계시지요?

 

아까 처럼 javac 또는 javac -version 을 쳤을때 위 그림과 같이 나오면 

 

OpenJDK 8은 설치가 모두 끝났습니다. 

 

OpenJDK 9가 필요하신 분은 아래 글을 참조해 주십시오. 

 

ymmedia.tistory.com/195

 

우분투(Ubuntu)에 OpenJDK 9 설치하기(Install)

지금 제가 Virtual Box에 Ubuntu를 설치 해 둔 것이 Ubuntu 16.04 입니다. 거기에 설치해 보겠습니다. 우선 Ubuntu에 접속하고 위와 같이 java 엔터를 처보십시오. 우분투 정말 친절 하군요. java 사용할 수있��

ymmedia.tistory.com

감사합니다. 

지금 제가 Virtual Box에 Ubuntu를 설치 해 둔 것이 Ubuntu 16.04 입니다. 거기에 설치해 보겠습니다.

우선 Ubuntu에 접속하고 위와 같이

java

엔터를 처보십시오.

우분투 정말 친절 하군요.

java 사용할 수있는 당야한 방법이 저게 나옵니다.

우리는

sudo apt-get install openjdk-9-jre-headless

라고 치겠습니다. ^^

그럼 글자가 쭉 올라가면서 설치가 진행 될 것입니다.

java 엔터 치시거나

java -version 엔터 치시면 위 그림과 같이 나오면 설치가 완료 된 것입니다.

저는 위에서 JDK 즉 Java Development Kit 를 설치한다고 했습니다.

그래서 이번에는

javac라고 쳐 보십시오.

앞에서 처럼 친절하게 알려 줍니다.

sudo apt-get install open-jdk9-jdk-headless

중간에 jre 대신에 jdk를 넣어 주시면 됩니다.

저도 설치하고 있습니다.

잘따라오고 계시지요?

아까 처럼 javac 또는 javac -version 을 쳤을때 위 그림과 같이 나오면

OpenJDK는 설치가 모두 끝났습니다.

리눅스에서 Java를 공부하실 수도 있고,

리눅스에서 이제 WAS 서버를 운영하실 수도 있습니다.

Apache-Tomcat 같은 것을 설치해서요.

다음 글에서는 Apache-Tomcat을 설치해보겠습니다.

감사합니다.

이번에는 Java의 예외 처리에 대해서 말씀 드리겠습니다. 

 

우선 예외 처리라는 것은

 

프로그램이라는 것이 오류가 날수 도 있습니다. 

 

이 오류에 대응하는 처리입니다. 

 

예를 들면 Database에 접속하는데 실패하면 어떻게 할 것인가?

 

SQL 문에서 오류가 나면 어떻게 할 것인가?

 

원하는 파일이 해당 위치 없다면 어떻게 할 것인가?

 

같은 내용입니다. 

어제 Thread.sleep 를 알려 드리면서 

 

ymmedia.tistory.com/192?category=868738

 

위 문서에서 try catch 문이 나와 있습니다. 

 

try {

...1

} catch (Exceptoin e) {

...2

} finally {

...3

}

 

위 코드 1번에서 예외 발생이 가능한 실행문을 

 

위 코드 2번에는 오류 났을 때 실행문을

 

위 코드 3번에는 이프로그램을 실행하고 오류가나도 때려죽어도 해야할 문장을 적으시면 됩니다. 

 

5초마다 Hello 를 실행하는 프로그램을 만들겠습니다. 

 

무한루프로 만들겠습니다. 

 

무한루프를 만들고 100번째 쯤에 Exception 을 발생 시켜서 Thankyou를 찍고 나가도록 만들어 보겠습니다. 

 

package kr.ymmedia.TestProject;

public class App 
{
    public static void main( String[] args )
    {
        
    	
    	
    	try {	
    		
    		System.out.println("Hello ..");
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			System.out.println("Exit....");
		} finally {
			
			System.out.println("Thank you");
			
		}
    }
}

 

어제에 이어서 코드를 확장하면 대충 위와 같습니다. 

 

위와 같이 하면 무한 루프는 아니고 Hello를 찍고 무조건 Thank you 를 찍고 끝납니다. 

 

package kr.ymmedia.TestProject;

public class App 
{
    public static void main( String[] args )
    {
        
    	
    	
	    	try {	
	        	/* 무한 Loop */
	    		int i=0;
	        	for(;;) {
	        		
	        		System.out.println("Hello .." + i);
	        		i++;
	        		if(i == 50) {
	        			throw new Exception();
	        		}
	        		Thread.sleep(1000);
	        		
	        	}
	        	
			} catch (Exception e) {
				System.out.println("Exit....");
			} finally {
				
				System.out.println("Thank you");
				
			}
    	
    	
    }
}

자 새로운 코드는 위와 같습니다. 

저렇게 하면 무한루프가 돕니다. 

 

Hello ..25
Hello ..26
Hello ..27
Hello ..28
Hello ..29
Hello ..30
Hello ..31
Hello ..32
Hello ..33
Hello ..34
Hello ..35
Hello ..36
Hello ..37
Hello ..38
Hello ..39
Hello ..40
Hello ..41
Hello ..42
Hello ..43
Hello ..44
Hello ..45
Hello ..46
Hello ..47
Hello ..48
Hello ..49
Exit....
Thank you

C:\dev\eGovFrameDev-3.7.0-64bit\workspace\TestProject\target\classes>

위코드를 실행하면 중간에 오류가 났고 Thank you는 무조건 찍어 주고 있습니다. 

 

그리고 첫번째 코드에서는 InterruptedException 이라고 명시해 주었지만, 두번재 코드에서는 Exception e 로 범용적인 것으로 썼습니다. 

 

예외는 명시적으로 발생시켜 주는 것이 좋습니다. 

 

하지만, 범용적인 Exception 이 편합니다. ㅎㅎㅎ

 

발생할수 있는 예외처를 고려 할 수 있다면, 보통 eclipse 가 추천해 줍니다. 

 

명시하면되고, 아무래도 여기서는 오류가 날것 같아 하면, Exception 을 사용하시면 됩니다. 

 

즐거운 하루 되십시오.

 

감사합니다. 

 

 

오늘 이야기할 내용은 프로그램의 실행시에 중간에 잠시 멈출 경우에 사용하는 함수입니다. 

 

package kr.ymmedia.TestProject;

public class App 
{
    public static void main( String[] args )
    {
        
    	
    	
    	try {	
        
			Thread.sleep(1000);
            
		} catch (InterruptedException e) {
        
			System.out.println("error");
            
		}
    }
}

 

위와 같이 사용하시면 됩니다. 

 

Thread.sleep(1000) 에서 1000은 밀리초 이기 때문에

 

1000초가 1초 입니다. 

 

따라서 10초는 10000초가 됩니다. 

 

우리가 생각하는 초 * 1000 하시면 일반적인 초가 됩니다. 

 

반대로 0.5초를 생각하시면 500을 넣으시면 됩니다. 

 

0.01초도 가능 합니다. 10으로 하시면 됩니다. 

 

정말 짭은 시간을 표현하기 위해서 자바는 밀리초를 사용하고 있는 것 같습니다. 

 

오늘도 즐거운 하루 되십시오.

 

double rnd = Math.random();

위코드는 0~1 사이 값을 렌덤으로 만들어 줍니다. 

 

제가 필요로 하는 것은 0~100000 사이 숫자를 random으로 만들어 주는 것이었습니다. 

 

import java.util.Random;

public class RandomTest {

	public static void main(args[]) {
    
    	Random rnd = new Random();
        
        //정수형을 리턴 할 것이기 때문에 nextInt()를 사용.
        
        int iRnd = rnd.nextInt(100000);
        
        System.out.println(iRnd);
    
    }

}

 

위와 같이 하면 Random 함수에서 원하는 값을 뽑을 수 있습니다. 

 

까먹지 말자는 취지에서 적습니다. 

 

참고 사이트 : securityspecialist.tistory.com/14

 

자바(JAVA) 랜덤(Random)값 사용 하기

랜덤값이란? 사용자가 임의적으로 값을 입력하는 것이 아니라 컴퓨터가 무작위로 값을 입력해 주는 것입니다. 자바에서 사용하는 랜덤값 이용방법을 알아보겠습니다. 자바에서 랜덤값을 이용��

securityspecialist.tistory.com

 

 

오늘의 개발일지 2020년06월11일 Java 파일(File) 이동(Move) 시키기 예제(Example)

안녕하세요 가야태자(@talkit) 입니다. 오늘은 Java에서 파일을 이동 시키는 것에 대해서 알아보도록 하겠습니다.

참고 출처 : https://huskdoll.tistory.com/304

실제로, 제가 앞에서 작성한 프로그램을 분석을 끝냈습니다. 그런데 문제는 뒤에 저 파일에 대한 분석을 또해야 하는 문제가 발생을 했습니다. T.T

그래서 이번에는 로그에 Founded 를 넣어서 찾으면 그 풀 Path를 가지고 있게 만들었습니다.

저 URL의 예제는 파일을 이동 시키는 코드만 있습니다.

그런데, 제예제는 파일을 한줄씩 읽고, 읽을 파일을 분석해서 이동 시키는 에제 입니다.

우선 제가 원하는 파일을 제대로 이동 시키는지를 보기 위해서 출력만 하는 소스 입니다.

package kr.ymmedia.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class SearchDEMMove {

    static List<File> targetFiles = null;

    static String baseFile = "/data01/ICECWRF/logs/SearchDEMLAT.log";    //분석할 로그 파일
    public static void main( String[] args ) throws Exception
    {

            BufferedReader br = null;

            // 분석할 로그파일을 읽음.
            br = new BufferedReader(new FileReader(new File(baseFile)));



            String line = "";

            //각 파일의 한 라인씩 읽어들인다.
            while((line = br.readLine()) != null) {

                //lins 을 " : " 구분해서 이동 시킬 파일 찾기

                String[] arrText= line.split(":");

                if(!arrText[0].trim().equals("Processing")) {

                    System.out.println("move file : " + arrText[2]);

                }

            }
            br.close();
        }

}

한번 돌려 보도록 하겠습니다.

잘돌아 갑니다.

그리고, 이제 실제로 이동하는 코드를 짜봤습니다.

package kr.ymmedia.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class SearchDEMMove {

    static List<File> targetFiles = null;

    static String baseFile = "/data01/ICECWRF/logs/SearchDEMLAT.log";    //분석할 로그 파일
    static String targetFolder ="/data01/LIDAR/gj/result_process/";
    public static void main( String[] args ) throws Exception
    {

            BufferedReader br = null;

            // 분석할 로그파일을 읽음.
            br = new BufferedReader(new FileReader(new File(baseFile)));



            String line = "";

            // 날짜 형식을 String으로 혹은 String을 날짜 형식으로 변환하기 위한 포맷형식이다.
            DateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");

             // Calendar형식에서 날짜를 가져온다. 특이점은 Calendar가 singleton 형식이다.
             // Date 값을 가져와서 String으로 변환한다.
             String datestr = format.format(Calendar.getInstance().getTime());
            // 혹시나 해서 현재 시간의 폴더를 만들어서 넣습니다. 


            File dir = new File(targetFolder + "/" + datestr  + "/");
            // 중복 방지를 위해서 폴더를 생성 합니다. 
            if (!dir.exists()) { //폴더 없으면 폴더 생성
                dir.mkdirs();
            }

            //각 파일의 한 라인씩 읽어들인다.
            while((line = br.readLine()) != null) {

                //lins 을 " : " 구분해서 이동 시킬 파일 찾기

                String[] arrText= line.split(":");

                if(!arrText[0].trim().equals("Processing")) {
                    System.out.println(line);
                    System.out.println("move file : " + arrText[2]);
                    // 분석된 파일을 File로 읽어 드립니다.  
                    try{
                    File file = new File(arrText[2].trim());
                    //기존 파일명만 가져옵니다. 
                    String targetFileName = file.getName();

                    System.out.println(targetFolder + "/" + datestr  + "/"  + targetFileName);

                    // 실제로 이동 시킨는 코드 입니다. 

                       if(file.renameTo(new File(targetFolder + "/" + datestr  + "/"  + targetFileName))){ //파일 이동
                            //return filePath; //성공시 성공 파일 경로 return
                        }else{
                            //return null;
                        }

                    }catch(Exception e){
                        e.printStackTrace();
                        // 파일이 없으면 오류를 뿌리기 while 문을 계속 합니다.
                        continue;
                    }



                }




            }
            br.close();
        }

}

그리고, 날짜 형식 관련 소스는 https://nowonbun.tistory.com/502 의 글을 참고 했습니다.

오늘은 여기 까지 입니다.

오늘도 즐거운 하루 되십시오.

감사합니다.

안녕하세요 가야태자(@talkit) 입니다. 오늘도 정규식을 구하기 위해서 다른 분 소스를 참고 했습니다.

출처 : https://offbyone.tistory.com/400

오늘 제가 찾아서 GIS에 넣고자하는 자료는

경도, 위도,높이

자료 형식이 위와 같이 되어 있습니다.

DEM 이라고 해서 디지털 수치 표고 자료 입니다.

저기서 제가 생각한 약 8km 반격의 위경도의 높이만을 찾아야해서 ^^

어제 작성한 프로그램으로 경도 값은 제가 필요 한 값으로 찾아 놓은 상태 입니다.

그런데, 위도 값도 어제 작성한 프로그램을 조금 수정해서 쓰려고 했는데 불행하게도 높이 자료가 35.으로 시작하는 값이 있어서 제가 원하는 위도가 아닌데 파일에 찍히는 것을 확인 했습니다. ^^

그래서 옛날 습관으로 찾은 것이 정규식입니다.

제가 정규식을 설명해도 좋겠지만,

위 주소에 정규식이 잘 정리 되어 있습니다.

단, 오늘 제가 작성한 정규식만 설명 드리겠습니다.

Pattern pattern = Pattern.compile("12[0-9]\\.[0-9]+," + words[j]);

12라는 숫자로 시작해서 한자의 숫자가오고 // 우리나라는 120도대의 경도에 위치해 있습니다.
그리고, 무조건 . 기호가 중간에 오고 그위에 숫자가 연속되다가 제가 입력한 35.14 정도의 값이 오면 파일에 적도록 구현 했습니다.

아래는 Full 소스 입니다.


package kr.ymmedia.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class SearchDEMLAT {

    static List<File> targetFiles = null;

    static String baseDir = "/data01/LIDAR/gj/result";    //검색할 디렉토리
    static String word = "35.14,35.15,35.16,35.17,35.18,35.19,35.20";         //검색할 단어
    static String save = "/data01/LIDAR/gj/result2/lat"; //검색결과가 저장된 파일명

    public static void main( String[] args ) throws Exception
    {

        File Dir = new File(baseDir);
        File[] Files = Dir.listFiles();

        //읽어들일 파일 input stream 선언
        BufferedReader br = null;
        String[] words = word.split(",");
        for(int i = 0; i < Files.length; i++){

             //파일이 아닌 경우 continue
            if(!Files[i].isFile()) {
                continue;
            }

          //input stream object 생성
            br = new BufferedReader(new FileReader(Files[i]));
            String line = "";

          //저장할 파일 output stream 생성

            String message = "";
            //각 파일의 한 라인씩 읽어들인다.
            while((line = br.readLine()) != null) {


                //라인 내용중 검색하고자  단어가 하나라도 있으면 파일에 기록한다.

                for(int j=0; j<words.length;j++) {
                    Pattern pattern = Pattern.compile("12[0-9]\\.[0-9]+," + words[j]);

                    Matcher matcher = pattern.matcher(line);

                    //if(line.startsWith("" + words[j])) {

                    if(matcher.find()) {

                        //writer.write(word + "=" + Files[i].getAbsolutePath());
                        //System.out.println(line.trim() + ":" + Files[i].getAbsolutePath());
                        message= message + line.trim() +"\n";
                        continue;

                    }else {
                        //System.out.println("");
                    }
                }
            }
            if(!message.equals("")) {
                System.out.println(i + " : Founded : " + Files[i].getAbsolutePath() );
                PrintWriter writer = new PrintWriter(new FileWriter(save+"_" + i +".txt"));
                writer.write(message);
                writer.flush();
                writer.close();
            }else {
                System.out.println(i + " : No results. : " + Files[i].getAbsolutePath() );
            }


            //input stream close.
            br.close();

            //output stream close.

        }






    }

}

예쁘지는 않지만 도움이 되셨으면 합니다.

감사합니다.

오늘도 즐거운 하루 되십시오.

안녕하세요 가야태자(@talkit) 입니다.

오늘은 java에서 원하는 문자열을 찾는 프로그램을 짤일이 있어서 검색을 했습니다.

출처 : http://blog.naver.com/PostView.nhn?blogId=rararara00&logNo=80054434809&widgetTypeCall=true

일단 원본 프로그램은 위를 참고 했습니다.

아래는 제가 작성한 프로그램 입니다.

package kr.ymmedia.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class SearchDEM {

    static List<File> targetFiles = null;

    static String baseDir = "폴더위치";    //검색할 디렉토리
    static String word = "126.84,126.85,126.86,126.87,126.88,126.89,126.90";         //검색할단어를,로 구분해서 나열
    static String save = "저장위치/result";       //검색결과가 저장된 파일명
                                                                                         // 저장 위치는 미리 만들어 두셔야 합니다. 
                                                                                         // mkdir -p 저장위치

    public static void main( String[] args ) throws Exception
    {

        File Dir = new File(baseDir);
        File[] Files = Dir.listFiles();

        //읽어들일 파일 input stream 선언
        BufferedReader br = null;
        String[] words = word.split(",");
        for(int i = 0; i < Files.length; i++){

             //파일이 아닌 경우 continue
            if(!Files[i].isFile()) {
                continue;
            }

          //input stream object 생성
            br = new BufferedReader(new FileReader(Files[i]));
            String line = "";

          //저장할 파일 output stream 생성
            PrintWriter writer = new PrintWriter(new FileWriter(save+"_" + i +".txt"));

            //각 파일의 한 라인씩 읽어들인다.
            while((line = br.readLine()) != null) {


                //라인 내용중 검색하고자  단어가 하나라도 있으면 파일에 기록한다.

                for(int j=0; j<words.length;j++)
                if(line.indexOf(words[j]) != -1) {
                    //writer.write(word + "=" + Files[i].getAbsolutePath());
                    System.out.println(line.trim() + ":" + Files[i].getAbsolutePath());
                    writer.write(line.trim() + ":" + Files[i].getAbsolutePath());
                }
            }

            writer.flush();

            //input stream close.
            br.close();

            //output stream close.
            writer.close();
        }

    }

}

저는 실제로 엄청 많은 파일들 사이에서 원하는 위경도를 뽑아서 다른 파일에 적고 싶어서 이렇게 만들어 있습니다.

현재 보이는 파일은 경도만을 뽑아서 넣고 있습니다.

저기에 또 위도도 검색하는 프로그램이 추가 되면 공개해 보겠습니다.

감사합니다.

오늘도 즐거운 하루 되십시오.

+ Recent posts