java

반응형




파일 I/O를 이용한 텍스트 파일 생성과 읽기를 이용한 간단한 누적시간계산하기


1. 처음 시간과 끝 시간을 구한 후

-> 끝 시간 - 처음 시간 = 총 소요시간


2. 텍스트 파일 유무를 체크 한 뒤


3.파일이 없다면(처음 기록하는 시간이므로) 총 누적시간 = 총 소요시간이므로 이 시간을 totaltime.txt에 기록


4. 만약 파일이 있었다면 총 누적시간 = 이전 누적시간 + 총 소요시간이다.

-이를 다시 totaltime.txt 기록한다.(덮어 쓰게 됨)


이런 순서로 진행된다.


Time.java


import java.io.*;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Time {
	static Date dt = new Date();
	static Time timer = new Time();
	static SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd, hh:mm:ss a");
	static int playTimeCheck = 0;

	public long startTime() {
		
		long start = System.currentTimeMillis();
		return start;
	}
	 
	public long endTime() {
		long end = System.currentTimeMillis();
		return end;
	}
	
	public long playTime(long l){
		long longTime = 0;
			long end = timer.endTime();  		//끝 시간 
			longTime = ( end - l ) / 1000; 		//끝 시간 빼기 처음시간
			playTimeCheck = (int)longTime; 		// 플레이 시간 저장
			System.out.println("플레이 시간 : " + (int)(longTime / 3600) + "시간  " + (int)(longTime % 3600 / 60) + "분  " + (int)(longTime % 3600 % 60) + "초");
		return longTime;
	}
	public void totalTime(){
		
		int total = 0;
		try {
			int play = playTimeCheck; 				//아까 계산한 플레이 시간 값
			File file = new File("c:/totaltime.txt");
			if(file.isFile()){						//totaltime.txt 존재 유무 체크
				BufferedReader outReader = new BufferedReader(new FileReader("c:/totaltime.txt")); 
				String read = outReader.readLine();	//누적 시간 읽기
				total = Integer.parseInt(read);		//읽은 값 total에 저장
				total += play;						//play시간과 total 더함
				outReader.close();
				BufferedWriter out = new BufferedWriter(new FileWriter("c:/totaltime.txt"));
				out.write(Integer.toString(total));	//합산된 total 값을 기록
				out.close();
			}else{									//파일이 없다면
				BufferedWriter out = new BufferedWriter(new FileWriter("c:/totaltime.txt"));
				total = play;						//처음에는 play시간이 곧 누적시간이므로 total에 play시간 대입
				out.write(Integer.toString(total));	//파일에 기록
				out.close();
			}
			
			System.out.println("누적 플레이 시간 : " + ( total / 3600) + "시간  " + (total % 3600 / 60) + "분  " + (total % 3600 % 60) + "초");
			
						
		} catch (IOException e) {
			System.err.println(e); // 에러가 있다면 메시지 출력
			System.exit(1);
		}
	}
	
}


이를 응용하여 예를 들면

public class TimeTest {

	public Time time = new Time();  //Time.java 객체선언
	long startTime = 0;
	long endTime = 0;
	
	public void setUpGame() {
		
		startTime = time.startTime();  //시작과 동시에 시작시간 구함
	
	}

	

	private void startPlaying() {
	
		finishGame();
	}

	

	private void finishGame() {
		exitGame();					//끝날 때 시간 구함
	}
	
	private void exitGame() {
		System.out.println("게임 종료");
		time.totalTime();			//누적시간 계산 후 출력
			
		}
			

	public static void main(String[] args) {
		DotComBust game = new DotComBust();
		game.setUpGame();
		game.startPlaying();
	}
}





대강 이런 식으로 사용가능하다..





반응형

'지식메모 > JAVA' 카테고리의 다른 글

JAVA JPasswordField 암호 값 가져오기  (0) 2015.09.20
문자열에서 숫자만 추출하기  (0) 2015.09.02
숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
반응형

String s="ABcdeFGhIJklmNop";


s=s.toUpperCase();

//모두 대문자로 바꾸기


s=s.toLowerCase();

/모두 소문자로 바꾸기






반응형

'지식메모 > JAVA' 카테고리의 다른 글

숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
java 문자열 구분자로 자르기  (0) 2013.10.02
ObjectNode 와 JsonNode 차이?  (0) 2013.09.06
mp3 ID3 v2 태그 파싱하기  (3) 2013.08.27
반응형


구분자를 지정하여 하나 이상의 값을 구분하여 데이터를 배열에 집어넣고 그 값을 꺼내 사용한다.


쿼리를 날릴때 조건이 두 가지가 있을때 사용하였다.



public static splitFunction(String ktype){     //ktype을 받는다.


	String ktypeWhere = "";     		//ktypeWhere는 공백상태

	String[] array = ktype.split(",");     //콤마 구분자로 배열에 ktype저장

	for(String cha : array){      //배열 갯수만큼 포문이 돌아간다.

	/* ktypeWhere가 비어있다면 ktypeWhere 에 cha 값을 넣고 비어있지 않다면
	*  기존 값에 ,를 추가하여 cha를 덧붙인다.
	*/
	ktypeWhere += (ktypeWhere.equals("")) ? "'"+cha+"'" : ",'"+cha+"'";
			
	}
}

주석 설명대로 처음에 String ktype을 받는다. 


만약 사과를 받았다면 "사과" 값이 하나 들어가지만 


사과 포도를 받았다면 "사과,포도" 라고 값이 들어간다.



, 콤마로 구분자를 주었다면 입력할때도,콤마를 꼭 넣어주어야 한다.

그냥 "사과 포도" 이렇게 써도 자동으로 콤마가 들어가지않는다.

"사과,포도"야 구분이 가능하다.



그러면


String[] array = ktype.split(","); 


여기서 split 이라는 함수가 , 를 구분자로 인식해서 


String[] array라는 배열에 0번째부터 사과 1번째에는 포도라고 저장한다.



그 다음 포문을 돌리는데 조건문이

for(String cha : array) 이므로

array 갯수만큼 포문을 돈다.


현재 사과 포도 2개가 있으므로 2번 돌게 된다.



그럼 삼항연산자를 이용해서


ktypeWhere += (ktypeWhere.equals("")) ? "'"+cha+"'" : ",'"+cha+"'";값을 넣어준다.

처음에 String ktypeWhere = ""; 이라고 선언했으니 비어있는 상태다.


 ktypeWhere.equals("") ? "'"+cha+"'" : ",'"+cha+"'" ;

ktypeWhere가 값이 ""이므로 비어있다면 ? cha 값을 ktypeWhere에 넣어주고 : 안 비어있다면 ,를 붙여 cha값을 추가한다.;


삼항연산자는 


조건문 ? 만족할때 실행 : 만족못할때 실행

이런 형식이다.


만약 if문으로 한다면


if(ktypeWhere.equals("")){
	ktypeWhere = cha;
}else{
	ktypeWhere +=  ","+cha;
}


이렇게 될 것이다.(맞나?)


그럼 사과 포도 데이터가 2개 있으니 처음 포문을 돌때는 ktypeWhere가 값이 비어있으니


ktypeWhere = "사과" 이다.



두번째 포문을 돌때는 이미 사과가 들어가 있으므로 ,를 이용해서 붙인다.


그래서 ktypeWhere = "사과,포도"이다.



그리고 쿼리에 넣을때는 ' '표시를 해줘야 하기 때문에 "'"+ 이 구문을 넣어주었다.

쿼리 쓸 일이 아니라면 안 넣어줘도 된다.



그런 다음 ktypeWhere 값을 갖다 쓰면된다.











반응형

'지식메모 > JAVA' 카테고리의 다른 글

숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
ObjectNode 와 JsonNode 차이?  (0) 2013.09.06
mp3 ID3 v2 태그 파싱하기  (3) 2013.08.27

mp3 ID3 v2 태그 파싱하기

2013. 8. 27. 15:49
반응형

뭐가 뭔지 잘 모르겠지만 일단은 출력된다...

http://www.jthink.net/jaudiotagger/

여기서 왼쪽 하단에 downloads 탭에 Maven Release 에서 

가장 최신으로 보이는 2.2.0-SNAPSHOT 으로 들어간다음

jaudiotagger-2.2.0-20130321.142353-1.jar

jar 파일을 다운 받아 프로젝트 속성에서 라이브러리를 추가해주었다.


jaudiotagger-2.2.0-20130321.142353-1.jar


자세한 소스분석은 모르겠다...


import java.io.File;

import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.mp3.MP3File;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;
import org.jaudiotagger.tag.id3.AbstractID3v2Tag;
public class test {
 public static void main(String[] args) throws Exception {
		String decoding = "ISO-8859-1";
		String encoding = "EUC-KR";
		File file = new File("/home/jeong/걸스데이-말해줘요.mp3");
		MP3File mp3 = (MP3File) AudioFileIO.read(file);
//  ID3v24Tag tag24 = mp3.getID3v2TagAsv24();
		AbstractID3v2Tag tag2 = mp3.getID3v2Tag();

		Tag tag = mp3.getTag();
		String title = tag.getFirst(FieldKey.TITLE);
		String artist = tag.getFirst(FieldKey.ARTIST);
		String album = tag.getFirst(FieldKey.ALBUM);
		String year = tag.getFirst(FieldKey.YEAR);
		String genre = tag.getFirst(FieldKey.GENRE);

		System.out.println("Tag : " + tag2);
		System.out.println("Song Name : " + title);
		System.out.println("Artist : " + artist);
		System.out.println("Album : " + album);
		System.out.println("Year : " + year);
		System.out.println("Genre : " + genre);
	}
}


출력결과

Tag : Tag content:

TIT2:Text="말해줘요"; 

TPE1:Text="걸스데이"; 

TALB:Text="GIRL`S DAY Party #6 [Digital Single]"; 

TCON:Text="아이돌"; 

TRCK:Text="1"; 

TYER:Text="2013"; 

TPE2:Text="걸스데이"; 

USLT:Language="English"; Lyrics="Intro>

우리 둘이 함께 해요 나를 혼자 두진 마

이 밤이 깊어져만 가 빨리 고백 

(민아)

안해? 안해? 안할꺼야?


A>

(소진)

You! 넌 내 맘을 너무 몰라 

Oh You! 빛나는 저 파도같아

You! 왜 자꾸 애태우는지 (아이야아 아아 이 야이야)


A`

(혜리)

(하나 하나 하나 둘 셋 넷!) 하면 솔직히 내게 말해줘 

(니가 먼저 말해주면 안돼) Oh 부끄러워 부끄럽단 말야 


B>

(민아)

시원한 바람 아름다운 해변 이곳엔 너와 단 둘이 

모든 걱정들은 저기 저 바다에 던져 버릴래 


C> 

(다같이)

지금 말해줘요 말해줘요 말해줘요  

(소진)

사실은 나를 좋아한다고 우릴 위한 저 바닷가로  빨리 떠나요 


(다같이)

지금 말해줘요 말해줘요 말해줘요 

(민아)

난 너 하나면 충분해 약속해 손가락 걸고 말해줘 말해줘요 말해줘 말해줘요 



Rap>

(유라)

다다른 여자보단 내가 나아 하나보단 둘이 

아침부터 저녁까지 우리 둘이 (나나나나) 

이 노래를 불러 Say 1!2!3!4!



(민아) 

야! 안 따라 부르냐?


B>

(혜리)

뜨거운 태양 부서지는 파도 이곳엔 너와 단 둘이 

(민아)

모든 걱정들은 저기 저 하늘에 던져 버릴래 


C> 

(다같이)

지금 말해줘요 말해줘요 말해줘요 

(민아)

난 너하나면 충분해 약속해 손가락 걸고 말해줘 말해줘요 말해줘 말해줘요 


Bridge>

(유라) 

오늘밤이 다 가기 전에 고백해줄래요 

(소진)

사랑해 사랑해 달콤한 입술로

(민아)

아침을 깨워줄 그댄 너란 걸  


C> 

(소진)

지금 말해줘요 나 사랑한다는 그 말 아끼지 말아요 두 손을 꼭 붙잡고 멀리 떠나요



(다같이-소진 애드립)

지금 말해줘요 말해줘요 말해줘요

(민아)

너와 이 여름안에서 영원히 함께 할래요 말해줘 말해줘요 말해줘 말해줘요


"; 

TLAN:Text="kor"; 

TPOS:Text="1"; 

APIC:MIMEType="image/jpeg"; PictureData="57966 bytes"; 


Song Name : 말해줘요

Artist : 걸스데이

Album : GIRL`S DAY Party #6 [Digital Single]

Year : 2013

Genre : 아이돌









반응형

'지식메모 > JAVA' 카테고리의 다른 글

숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
java 문자열 구분자로 자르기  (0) 2013.10.02
ObjectNode 와 JsonNode 차이?  (0) 2013.09.06

+ Recent posts