'java'에 해당되는 글 28건

  1. 2012.06.12 Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기 (2)
  2. 2011.12.01 기본적인 Java 개발환경 구축하기( JDK 설치 + 이클립스 설치 ) (19)
  3. 2011.11.28 java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction
  4. 2011.11.24 Java 에서 문자열 비교할때 equals() 말고 == (비교연산자) 로 비교하기 (1)
  5. 2011.11.24 Java에서 파일로 부터 데이터 읽어서 정렬(bubble sort)하기

Java : JSOUP 를 이용, html에서 소스, 링크경로 추출후 절대 경로로 바꾸기



Java 라이브러리 중에 JSOUP 라고 심플하면서도 왠지 간지나는 HTML 문서를 다루는 라이브러리가 있다.


요 라이브러리를 이용해 HTML 문서에서 각종 경로를 추출해서 요 경로를 절대 경로로 바꿔보자.


먼저 테스트할 html 문서

<html>
<head>
	<title>테스트다!!</title>

	<script type="text/javascript" src="/resource/js/jquery-1.7.1.min.js"></script>

	<link type="text/css" href="/resource/css/admin/general.css" rel="stylesheet" />
</head>

<body>
<span id="navi">
	<img src="http://www.naver.com/resource/image/stitle_standarda.gif" alt="" />
</span>

테스트다!!
</body>
</html>



테스트 소스

import java.io.IOException;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class Test  {
	public static void main(final String[] args) throws IOException{
		Document doc = Jsoup.parse(
				new URL("http://127.0.0.1:8080/index.html").openConnection().getInputStream(), 
				"UTF-8", 
				"http://127.0.0.1:8080/");
		
		// src attribute 가 있는 엘리먼트들을 선택
		Elements elems = doc.select("[src]");
		for( Element elem : elems ){
			if( !elem.attr("src").equals(elem.attr("abs:src")) ){
				elem.attr("src", elem.attr("abs:src"));
			}
		}
		
		// href attribute 가 있는 엘리먼트들을 선택 
		elems = doc.select("[href]");
		for( Element elem : elems ){
			if( !elem.attr("href").equals(elem.attr("abs:href")) ){
				elem.attr("href", elem.attr("abs:href"));
			}
		}
		
		System.out.println(doc.toString());
	}
}



변환된 html 문서

<html>
<head>
	<title>테스트다!!</title>
	<script type="text/javascript" src="http://127.0.0.1:8080/resource/js/jquery-1.7.1.min.js"></script>
	<link type="text/css" href="http://127.0.0.1:8080/resource/css/admin/general.css" rel="stylesheet" />
</head>
<body>
	<span id="navi"> <img src="http://www.naver.com/resource/image/stitle_standarda.gif" alt="" /></span> 
	테스트다!!
</body>
</html>




JSOUP 사이트 : http://jsoup.org/


Maven Dependency

<dependency>
	<groupId>org.jsoup</groupId>
	<artifactId>jsoup</artifactId>
	<version>1.6.3</version>
</dependency>



뭐 이것 외에도 JSOUP 를 이용하면 HTML뿐만 아니라 XML 도 쉽게 다룰수 있다.


JQuery 에서 css 셀렉터를 써서 엘리먼트를 가져와서 쪼물닥 거리는 것과 비슷하게 xml 문서를 쉽게 파싱해서 땡겨다 쓸수 있다.


저번에 얼핏 말했던 xpath 를 이용해서 쪼물딱 거리는것 보다 개인적으로 훨씬 좋은것 같다.


JQuery 써본 사람들은 금방 쉽게 대충 파악해서 쓸 수 있다. 고건 시간되면 다음 기회에~

Trackback 0 Comment 2
  1. 정존 2013.07.31 11:09 신고 address edit & del reply

    좋은 자료 감사합니다.^^

  2. 장연진 2015.10.01 02:26 address edit & del reply

    죄송하지만 질문한가지 드려도 될까요??? 저는 구글 검색 결과를 파싱하려고 하는데요. parse()함수 대신 connect 함수를 써도 무관할까요?

기본적인 Java 개발환경 구축하기( JDK 설치 + 이클립스 설치 )

자바관련 커뮤니티를 살살 돌아다니다 보니까 의외로 이클립스같은 IDE 를 쓰지 않고 에딧트플러스나 울트라에딧트 같은 에디터로 개발을 하는 사람들이 있는것 같았다. 뭐 하긴 나도 자바 개발할때 에디트플러스 쓰다가 이클립스로 바뀌기 까지 무려 일년정도의 세월을 보내긴 했었다 -_-;

아무튼!, 요렇게 좋은 이클립스를 쓰지않고 매우매우 불편하게 개발을 하고 있는 사람들을 보면 요걸 꼭 써보라고 말을 해주고 싶지만 부끄러움을 많이 타서..


그래서 완전 쌩 기초편으로, JDK 설치부터 이클립스 설치후 전형적인 Hello 라는 문자열을 찍는 후로그램 작성까지 설명하는 포스트를 작성해 본다. 





먼저 자바개발의 제일 첫번째 시작은 JDK 를 설치하는 것이다. java.sun.com 사이트에가서 JDK 를 다운로드 받는다.

다운로드 페이지 : http://www.oracle.com/technetwork/java/javase/downloads/index.html


다운로드는 당연히 JDK 를 다운로드 받아야 한다. ※ JRE 는 단지 자바 프로그램을 실행할 수 있게 해주는 것이고, JDK 는 자바실행+자바로 개발을 할 수 있게 해주는것이다.


 뭐 대부분 윈도우 사용자겠지만 자신의 윈도우에 맞는 버전을 다운로드 받는다.
※ 32비트 윈도우 사용자는 Windows x86을 받으면 되고, 64비트 윈도우 사용자는 Windows x64 를 다운로드 받으면 된다.




 JDK 다운로드를 완료했으면 이제 설치를 하자. 설치 과정상에 주의할건 하나도 없고 일단 더블클릭후 계속 Next 만 해주면 설치가 끝난다.






JDK 설치가 완료됬으면 이제 에딧트플러스 대신 사용할 이클립스를 설치하면 된다.

다운로드 주소 : http://www.eclipse.org/downloads/

이클립스는 용도에 따라 여러가지 버전이 있는데 제일 무난한 Eclipse IDE for Java EE Developers 버전을 다운로드 받으면 된다. JDK 와 마찬가지로 자신의 윈도우 비트수에 맞는 버전을 다운로드 받으면 된다.



 이클립스 설치는 JDK 설치보다 더 간단하다. 그냥 설치하고 싶은 폴더에다 압축만 풀면 끝난다. -_-





 압축이 다 풀렸으면 이클립스 아이콘을 따블클릭해서 실행해 보자.

맨처음 실행하면 작업할 소스가 생성될 작업공간(폴더)를 선택하라고 하는데, 하고 싶은 폴더로 지정후 OK 버튼을 클릭하자.
(※Use this as the default and do not ask again 을 체크 해주면 다음에 실행할때 요런걸 묻는 창이 안뜨고 바로 실행된다. 계속 물어보면 귀찮으니까 체크해 주면 다음이 편해진다.)




 ※ 경우에 따라 이상한 에러를 뿍 뱉어 내면서 이클립이 실행이 안될 경우가 있다. 만약 실행이 안될때는 아래 관련 포스트를 보고 해결하길 바란다.



이클립스가 뿍 실행됬다. 웰컴~   웰컴은 무슨~ 그냥 닫으면 된다.



최초로 실행했을때 화면구성은 요래 되있는데 지금 딱히 필요없는 View 들은 과감하게 닫아버리자. 뭐 나중에 필요하면 추가하면 되니깐.


 필요한 것들만 남기고 싹 닫아 버리자.




음 이제 기본적인건 다끝났고 Hello 를 출력해 주는 후로그램을 이클립스로 만들어볼 차례다.
먼저 이클립스로 Java 프로그램을 맨들기 위해서는 프로젝트를 하나 생성해 줘야 한다.


File > New > Project



 Java 후로그램을 작성할거니깐 Java Project 선택



프로젝트에 대한 정보를 간단하게 입력한다. 프로젝트 이름은 MyProject 로, 이 프로젝트에서 사용할 JDK 버전을 바꾸고 싶다면 바꿔주고 Finish!




 Finish 하면 요런 창이 뜨는데 요렇게 체크한다음에 No 를 클릭해 주자. (Yes 클릭하면 화면 구성이 쫌 바껴버리는데 또 필요없는 View 이 생겨버려서 다시 끄기 귀찮다)




 MyProject 가 뽓 생성됬다.

 




Project 생성까지 다 했으니 이제 요 프로젝트에 드디어!! 클래스를 추가하고 코딩을 할 수 있게 됬다.

Project Explorer 에서 src 폴더 선택 후 마우스 오른쪽 버튼을 클릭 > New > Class 를 선택하자.




 만들 클래스에 대한 정보를 간단하게 입력하자. 패키지명은 필수가 아니기 때문에 필요없으면 안 넣어도 되고, 클래스명을 적당하게 지어주고~
public static void main(String[] args) 체크박스를 선택해 주면 클래스 생성시 main() 함수도 같이 맹글어준다.

 


 클래스가 뽓 맨들어 졌다.




 Hello 를 콘솔로 출력하는걸 맹그는게 최초 목적이였으니까 살짝 코딩해 주자.
※ 팁 : 소스코딩할때 sysou 요렇게만 타이핑 하고 Ctrl+Space 를 눌러보자. System.out.println() 을 자동으로 맹글어준다 -_-;;

※ 이클립스 인디고 버전은 한글폰트가 이상하게 후지게 나온다. 헬리오스 버전까지는 괜찮았는데, 아무튼 한글 폰트를 다시 깔쌈하게 바꾸는 것은 요 포스트를 참고하면된다.




이제 코딩을 다했으니 Ctrl+S 로 소스를 저장하고 요 클래스를 실행해볼 차례다.
Project Explorer 에서 FirstApp.java 를 선택하고 마우스 오른쪽 버튼 > Run As > Java Application 을 클릭해 보자.



 기대했던 Hello 가 콘솔창에 뽓 찍힌다.




※ 한번 후로그램을 실행하면 실행했던게 자동으로 등록되기 때문에 다음에 실행할때는 툴바에서 선택하면 편리하게 실행시킬 수 있다.



Trackback 0 Comment 19
  1. 2012.01.08 11:00 address edit & del reply

    비밀댓글입니다

  2. 2013.04.15 10:34 address edit & del reply

    뽓이 인상적이네요 왠지 뽓 말고는 적절한 표현이 없다는 생각이 들었습니다.ㅋㅋ 잘봤습니다.

  3. 오승 2013.08.21 19:52 address edit & del reply

    안녕하세요.
    좋은 강좌 정말 정말 잘 봤습니다.
    근데 run 실행할때..콘솔창에 terminated. 라고 나오고...C에 자바 폴더에 jre7에 무슨파일...이런식으로 나오던데;; 이건 왜그런건지 혹시 아시는지요 ㅠㅜ

    • 스토브 2013.08.22 18:02 신고 address edit & del

      말씀해주신 것만으로는 어떤 문제인지 파악하기가 힘드네요~~

      쪼금더 자세한 내용이 필요하네요~~~

  4. 차동박 2014.04.11 20:06 address edit & del reply

    감사합니다.
    님의 친절한 설명 덕분에 이클립스를 처음으로 한번 실행해볼 수 있었습니다.
    계속헤서 좋은 글 부탁드립니다.

  5. 운승 2014.08.05 08:33 address edit & del reply

    자바 환경 설치법 찾다가 이 블로그에서 많은 도움 얻어갑니다 ^^

  6. 스토브 2014.08.05 09:08 신고 address edit & del reply

    도움이 되셨다니 기쁨지네요~

  7. 신입사원 2014.08.08 11:07 address edit & del reply

    잘 봤습니다.

  8. 2014.08.20 21:52 address edit & del reply

    비밀댓글입니다

    • 스토브 2014.08.21 13:52 신고 address edit & del

      음 그렇다면 굳이 JDK 64비트 버전을 설치안하셔도 됩니다~
      JDK 32비트 버전을 설치하셨을 경우 이클립스도 32비트 버전 받아서 사용하시면 별 문제 없을꺼에요~

      그리고 굳이 JDK 64비트 버전을 깔고 싶으시면 32비트 버전도 같이 설치하고시고 PATH 경로에 JDK32비트 버전 설치디렉토리/bin 을 추가하시고 다시 한번 해보세요~

      커맨드 창에서 where java 라고 쳤을때 32비트 jdk 가 제일 앞에 있으면 아마 기존에 쓰시던 후로그램도 되지 않을까 하고 조심스레 추측해 봅니다.

  9. 질문자 2014.08.21 22:05 address edit & del reply

    우선 답변 감사 드립니다.
    그런데 답변 내용 중에 제가 이해가 안 되는 부분이 있어서 재 질문 드립니다.
    1. 음 그렇다면 굳이 JDK 64비트 버전을 설치안하셔도 됩니다~
    --> 제 컴의 운영체제가 윈7 64bit인데 이클립스를 32비트를 설치해도 작동 된다는 애기 신가요.
    2.굳이 JDK 64비트 버전을 깔고 싶으시면 32비트 버전도 같이 설치하고시고 PATH 경로에 JDK32비트 버전 설치디렉토리/bin 을 추가
    --> 현재 jdk32비트와 64비트 두개 설치 했으며 이클립스는 64비트입니다. 다른 블로거에서 자바 환경 변수(JABA_HOME)를 설정 할때
    32비트 경로로 설정하면 된다는 애기가 있어서, C:\Program Files (x86)\Java\jdk1.8.0_20 이렇게 변수값에 넣고 실행 했으나 구동이 안됌
    그런데 여기서 PATH 경로에도 삽입 해보라고 조언 주셔서 기존 PATH 값 (C:\Users\jeon\AppData\Local\Bandizip\7z)이 이렇게 된것에
    앞쪽으로(%JAVA_HOME%\bin;C:\Users\jeon\AppData\Local\Bandizip\7z)-->자바환경변수에 삽입햇으나 작동안됌
    그래서 이번에는(C:\Program Files (x86)\Java\jdk1.8.0_20\bin;C:\Users\jeon\AppData\Local\Bandizip\7z)--> 이렇게 해도 작동안됌
    환경 변수 설정후에는 재 부팅 해야 하나요, 또는 잘못 된 부분이 있으면 알려 주시면 감사 하겠습니다.
    3. 커맨드 창에서 where java 라고 쳤을때 32비트 jdk 가 제일 앞에 있으면
    -->C드라이버에서 Where java 치니
    C:\ProgramData\Oracle\Java\javapath\java.exe
    C:\Windows\system32\java.exe
    C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe
    이렇게 나오네요 알려 주신 대로 된것인가요. 그러나 이 상태에서도 작동이 안되네요
    4. 이건 제가 직접 해 본 것입니다.
    구동 하고자 하는 프로그램의 exe를 우크릭한 상태에서 폴다운 메뉴에서 연결프로그램 수동으로 검색 해서
    Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe
    경로 찾아 가서 이번만 수동으로 연결을 시켰습니다. 그런데도 작동이 안되네요
    혹시 다른 해결책을 하시면 좀 알려 주세요
    그럼 좋은 저녁 보내세요


    • 스토브 2014.08.21 22:23 신고 address edit & del

      1. 제 컴의 운영체제가 윈7 64bit인데 이클립스를 32비트를 설치해도 작동 된다는 애기 신가요.
      -----> 넹 운영체제에 상관없이 JDK랑 이클립스 비트만 맞으면 실행되요~


      2. 환경변수 바꾼다음에 재부팅은 안해도 되는데 적용된걸 확인하실려면 커맨드 창은 다시 껏다가 켜야 되요~


      3. 쪽바로 PATH 를 설정하셨다면 where java 했을때
      C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe
      C:\ProgramData\Oracle\Java\javapath\java.exe
      C:\Windows\system32\java.exe

      요런식으로 C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe 이게 맨위에 나와야 되요~

      만약 기존 PATH 가

      A;B;C;D; 이렇게 되 있다면

      C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe;A;B;C;D;

      이런식으로 하면 제일 위로 올라갈꺼에요 아마도~


      4. 이것에 대해서는 저도 잘~~ ^-^;

  10. 질문자 2014.08.22 21:26 address edit & del reply

    답변 감사 드립니다.
    알려 주신 대로 해 보았으나 안 되어서 다시금 질문 드려 봅니다.
    C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe 이것을 path에 제일 앞쪽에 두시라고 해서
    C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe;C:\Users\jeon\AppData\Local\Bandizip\7z; 이렇게 적어서 넣었습니다.
    그리고
    where java 하면
    C:\ProgramData\Oracle\Java\javapath\java.exe
    C:\Windows\system32\java.exe
    이렇게 두 줄만 나오네요 원하는
    C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe 이것이 사라 집니다.
    역시 이상태로 실행 해 보았으나 애플케이션이 작동 안하네요

    다시 원래 되로 환경 변수를 변경하면
    C:\Program Files (x86)\Java\jdk1.8.0_20\bin;C:\Users\jeon\AppData\Local\Bandizip\7z --> java.exe 생략
    where java 하면

    C:\ProgramData\Oracle\Java\javapath\java.exe
    C:\Windows\system32\java.exe
    C:\Program Files (x86)\Java\jdk1.8.0_20\bin\java.exe

    맨 아래에 다시금 나옵니다. 왜 이렇까요 ??

    여기서 다시금 질문 드립니다.
    알려 주신 대로 나오게 하려면 어떻게 해야 하나요

  11. 2014.09.19 10:10 address edit & del reply

  12. 카이로스 2014.11.07 00:54 address edit & del reply

    정말 최고네요...ㅠㅠ 자주오겠습니다

  13. 2015.01.09 21:23 address edit & del reply

    ㅎㅎㅎ 좋은정보 감사합니다. 근데 eclipse에 쓰는 언어가 java 언어 인가요???/ 이런건 어디서 배워야 하죠? 좋은 책 있다면 추천좀 해주세요!~~

  14. 아인모친 2015.01.28 01:01 address edit & del reply

    개발을 익혀야 하는 비개발자입니다. 포스팅 해주신 내용대로 따라하니 잘 되네요. 감사합니다.

    • 스토브 2015.01.30 22:13 신고 address edit & del

      차근차근 하나하나씩 알아가시면서 재미있게 개발해 보세요~ 화이팅~!!

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction



아침에 출근 했는데 갑자기 온 사방에서 내가 만든 시스템에 로그인이 안된다고 쌩 앙탈들을 부렸다.


svn 자동으로 소스를 체크아웃 받아서 maven 으로 배포를 시켜주는 스크립트를 작성해서 매일 새벽 5시에 자동으로 배포 시키도록 해 놨는데.

어떤 아이가 잘못된 소스를 커밋해 놔서 그게 같이 배포가 된줄 알고 로그를 찬찬히 살펴봤더니 그런 종료의 에러가 아니였다.



익셉션 로그를 보니  첨보는 에러인 

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction; 

요런 에러가 뽓 있었다.

대충 보니 mybatis 에서 나는 에러 같았다.




에러의 원인은 요랫다.

maven 디펜던시에 mybatis 최신 스냅샷 버전을 받도록 설정이 되 있어서, 최신 스냅샷 버전의 라이브러리로 바뀌는 바람에 나는 에러였다.

기존 mybatis 디펜던시 설정은 요랬다. 
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.1.0-SNAPSHOT</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.0.3-SNAPSHOT</version>
</dependency>



요렇게 되 있는걸 릴리즈 버전을 쓰도록 요래 바꿔 주니깐 다시 잘 된다.
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.0.6</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.0.2</version>
</dependency>



mybatis 는 살짝살짝 버그가 쫌 있어서 최신 버전을 쓰는게 좋다고 해서 그렇게 해 놨는데, 스냅샷 버전을 쓰는것은 지양해야 되겠다.

Trackback 0 Comment 0

Java 에서 문자열 비교할때 equals() 말고 == (비교연산자) 로 비교하기


왠지 도움이 될것 같다면 추천을 *(-_-)*


오늘 이클립스에서 작업하다 스트링 객체 다음에 . 을 찍고 뭐 쓸만한게 없나 문득 살펴봤다.

왠지 늘 쓰던거만 쓰면 재미없지 않은가! 뭐 재미진 메소드가 없나 하는 요런 마음?


고러던 와중 그동안 즌혀 관심 1g 조차 없었던 intern() 이라는 메소드가 보였다.

이클립에서 뽓 튀어 나오는 설명을 대충 쪽 읽어보니 == 으로 스트링이 똑같은지 비교를 해주게 하는것 같았다.



뭐! 요런게 있었던 말이가! 하면서 요즘 나온 JAVA7 에 새로 추가된 메소드 인가 하고 API 를 찾아보니 JDK 1.3 부터도 있었던 메소드였다 -_-;;

아무튼 요 메소드를 쓸 일은 거의 1% 미만이지만 왠지 재미진것 같으니깐 알아는 둬야지

대충 요딴식으로 사용한다.
String a = new String("3269");
String b = new String("3269");

System.out.println(a == b);    // false

System.out.println(a.intern() == b);    // false

System.out.println(a.intern() == b.intern());    // true



음 막상 코드를 작성하고 나서 보니 "3269".equals(a); 가 훨씬 더 좋구나 라고 생각이 든다 -_-;  분명히 무슨 용도가 있기 때문에 맹근 메소드일껀데 아직까진 그 용도가 잘 파악이 안된다.


※ 비교연산자는 == 요것만 되는것 같다 < , > 요런건 안됨. 컴파일 에러남 

Trackback 0 Comment 1
  1. 과객 2012.03.04 19:34 address edit & del reply

    intern 메소드는 원래 String 객체의 특성이 고려된 메소드입니다.
    String 객체의 특성은 일종의 케쉬(pool)이면서 불변의 원칙을 가지고 있죠
    즉 이미 생성된 문자열이 있다면 케쉬에서 가져와서 반환하고..
    없으면 생성하여 저장하면서 반환합니다.

    다음에 동일한 문자열을 요청하게 되면 이미 생성된 객체가 리턴되는데..
    이때 이미 등록되어 있는지 않되어 있는지 내부적으로 확인하는 메소드가 intern 입니다.
    따라서 개발자가 쓸 용도도 아니고.. 쓰일일이 String 객체를 확장하거나.. 등등
    아주 특정한 상황이 아닌 담에는 쓰이지 않습니다.

    음.. 뭘 찾다가 여길 온건지 까먹은 @.@

Java에서 파일로 부터 데이터 읽어서 정렬(bubble sort)하기


왠지 도움이 될것 같다면 추천을 *(-_-)*


학교에서 내주는 숙제용 소스코드이다.

자바 기본 라이브러리로 있는 ArrayList 와 Collections.sort() 를 이용하면

임시 배열에 읽었다가 복사하고 꾸리한 버블정렬을 할 필요없이 간결한 코드를 맹글 수 있지만, 이건 숙제용이니깐~

그래도 약간 배울만한 점은 Scanner 클래스의 새로운 발견이랄까?

Scanner 는 주로 System.in 에서 사용자로 부터 뭔가를 입력받는 용도로 많이들 쓸 건데,

여기서는 File 에서 데이터를 읽는 용도로 썼다. InputStream 이나 Reader 계열로 뭔가를 읽는 코드보다 간결해서 좋은것 같다.

요거는 앞으로 Stream 에서 뭔가를 읽고 싶을때 어째 잘 써먹도록 해야 겠다. 




소스코드
import java.io.File;
import java.util.Scanner;

public class FileSort {
	public static void main(String[] args) throws Exception {
		Scanner scan = new Scanner(new File("c:\\numbers.dat"));

		float[] arr = new float[100];
		int cnt = 0;

		// numbers.dat 파일읽기
		while (scan.hasNext()) {
			arr[cnt++] = scan.nextFloat();
		}

		// 읽혀진 숫자 갯수만큼 배열을 생성해서 복사
		float[] numbers = new float[cnt];
		System.arraycopy(arr, 0, numbers, 0, cnt);

		// 버블정렬
		bubbleSort(numbers);

		// 배열 출력
		for (float num : numbers) {
			System.out.println(num);
		}
	}

	// 내림차순 버블 소트
	public static void bubbleSort(float[] arr) {
		int n = arr.length;
		for (int pass = 1; pass < n; pass++) {
			for (int i = 0; i < n - pass; i++) {
				if (arr[i] < arr[i + 1]) {
					float temp = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = temp;
				}
			}
		}
	}
}


내림차순으로 바꾸고 싶을때는 if (arr[i] < arr[i + 1]) 요기에서 요렇게 부등호 방향만 바꿔주면 된다. if (arr[i] > arr[i + 1]) {


사용된 numbers.dat 파일


Trackback 0 Comment 0
prev 1 2 3 4 ··· 6 next