지식메모

반응형




보석 또는 핑클 노래인줄만 알았던

Ruby 

언어로 해야될게 있다고 해서 시도해보았다.


일단 툴이 중요한데 이클립스에서도 플러그인이 있다고 하여 다행이었다.


새로 툴 깔아서 그거 익히는 것보다는 훨씬 나을테니..


우선 이클립스 상단 Help > Install New Software 를 클릭


Add를 누른 후 다음 주소를 넣어준다.


http://download.aptana.com/studio3/plugin/install




그럼 Aptana Studio3 라고 나오는데 이걸 설치해준다.




설치가 끝나고 이클립스 재부팅을 한다.


그리고 프로젝트를 생성하는데



루비 프로젝트가 생겼다.

만약 없으면 밑에 Project...를 눌러 루비 프로젝트를 선택한다.



프로젝트를 생성 후 우클릭

New > File 을 선택




파일을 생성하는데 꼭 파일명 뒤에 ruby 확장자인

.rb 

를 붙여준다.





그럼 파일이 생긴다.


테스트 용으로 파일을 더블클릭해 연 뒤

puts "hello ruby"


입력 후 Run 하면 하단에 결과가 나타난다.





+번외


그리고 사실 RDT를 설치하면 된다고 했는데 설치해도 루비 프로젝트가 나오지 않아 Aptana를 설치했다.


혹시 Aptana를 설치하고도 안된다면 이걸 설치해볼 수 있다.


RDT 설치는 똑같다.


http://download.aptana.com/tools/radrails/plugin/install/radrails-bundle



Rails 를 설치한다.



똑같이 설치해주면 된다.



반응형
반응형




설치 환경

Windows 7 64bit


안드로이드 칼라배시 설치하기




그래서 루비 언어 설치부터 해야한다.


벌써부터 예감이 안 좋은게 설치하면서 삽질만 푸다 우물을 발견할 것만 같다.




이부분은 환경변수 설정 부분이지만

인터넷 찾다보니 서로 설치환경이 달라 이것저것 시도해 본 방법이므로

우선 무시하고

혹시나 밑에 과정에서 안되는 부분이 있다면 시도해볼 수 있다.



이미 이클립스와 자바가 설치되어 있다면 환경변수는 다 되어있다는 상태로 가정한다.


혹시 모르니 ANDROID_HOME 이라는 시스템 환경변수를 추가하여

변수 값은 sdk 폴더(또는 android-sdks 폴더) 경로로 지정해준다.




또 시스템 변수 Path 를 열어

;D:\backup\eclipse\adt-bundle-windows-x86_64-20140702\sdk\platform-tools




platform-tools 폴더 경로 추가해준다.

추가할 때 앞에 세미콜론 ; 필수



sdk 안 깔려 있다면

http://developer.android.com/sdk/index.html#Other


여기서


installer_r24.2-windows.exe(Recommended)


이걸 받는다.





우선 루비를 다운받아야 한다.


http://rubyinstaller.org/downloads/


위 링크로 들어간다.

그럼 아래와 같은 사이트가 나타나는데



우선 RubyInstaller 에서 최신 버전을 받는다.

윈도우 64비트이므로 64비트 버전을 다운로드


그리고 아래 쪽에 DEVELOPMENT KIT 도 다운받아야 한다.

이것도 최신버전으로 64비트로 다운로드 하였다.




다운받은 Ruby 2.2.2(x64) 를 실행시킨다.

그럼 중간에 아래와 같은 화면이 나타나는데 일단 다 체크했다.




그리고 쭉 install 한다.


cmd 창에서 

ruby -v

라고 치면 루비 버전이 나타날 것이다.

그럼 일단 루비 설치 끝




이제 DEVELOPMENT KIT 를 설치한다.

이건 설치가 아니라 그냥 압축이 풀릴 것이다.


C 드라이브에 DevKit 폴더를 만들어 풀어 놓았다.


임의의 폴더에 압축을 풀고 나서


cmd 창을 킨다.


그리고 해당위치로 이동

C:\Devkit


그리고 


ruby dk.rb init


을 입력한다.


그럼 어쩌구 저쩌구 나오고


ruby dk.rb install -f 


라고 입력한다


그런데!!



위 와 같이 나온다면 

Devkit 폴더로 가서 

config.yml

을 수정해주어야 한다.



파일을 메모장으로 열어보면 아마


# This configuration file contains the absolute path locations of all

# installed Rubies to be enhanced to work with the DevKit. This config

# file is generated by the 'ruby dk.rb init' step and may be modified

# before running the 'ruby dk.rb install' step. To include any installed

# Rubies that were not automagically discovered, simply add a line below

# the triple hyphens with the absolute path to the Ruby root directory.

#

# Example:

#

# ---

# - C:/ruby19trunk

# - C:/ruby192dev

#

---


이렇게 되어있을텐데


# - C:/ruby192dev


이걸 루비가 설치된 폴더 경로로 바꿔주어야 한다.





 위 사진 처럼 루비 폴더 경로로 바꿔준다.


앞에 # 표시 꼭 삭제해준다.

#이 있으면 주석으로 인식해서 적용되지 않는다.


그럼 다시 cmd 창으로 돌아와서

(기존 cmd 창 끄고 새로 킨다)

다시 시도 한다.


ruby dk.rb install -f



아까와는 다른 문구다! 아무래도 잘된거 같다.


루비 설치 끝!



Android calabash 설치 후 apk 실행하기


이제 칼라배시를 설치한다.


gem install calabash-android


입력



그럼 뭔가 주르르륵 나온다.


설치됐다.


혹시 Couldn't reserve space for cygwin's heap 에러가 뜬다면


 Ruby 설치 폴더의 bin 디렉토리의 msys-1.0.dll 파일을 url의  msys-1.0.zip 파일 다운 받아 덮어쓴 후 위 cmd 다시 실행하면 된다고 한다.


이제 아무 위치에 폴더를 생성한다.

D:/testapp 라고 생성했다 치면


cmd 창에서 D:/testapp 경로로 이동하여


calabash-android gen 


을 실행하면 



Question 문구 나오면 엔터치고 하면 features 폴더가 생성될 것이다.

실제로 testapp 폴더에 들어가면 생성되어 있을 것이다.


또 들어가면 my_first.feature 라는 파일이 있는데 거기다 스크립트를 작성하면 된다.


그리고 이제 테스트 해볼 apk 파일을 해당경로에 복사해놓자

testapp 폴더에 복사해놓고


calabash-android run ~~.apk 


를 실행하는데 잘되면 다행인데 CP949 어쩌구 에러가 뜬다면


chcp 65001 을 입력하여



위와 같이 변경 후 시도한다.


잘되면 다행인데 또 뭔가 터진다.


apk 서명 문제가 발생하는데 이건 링크로 첨부


http://yonoo88.tistory.com/670



일단 설치는 했고 이제 활용법을 알아야하는데 뭐가 뭔지 모르겠다..







반응형
반응형


추가 하드디스크 마운트하기


환경 : Cent OS 7 버전 ssd 에 설치 후 하드디스크 마운트 

ssd에 Cent OS 를 설치한 후 1TB 하드디스크에 가상머신 이미지를 저장하여야 하는데 접근이 불가능했다.



암호를 쳤음에도 접근할 수 없다고 뜨는 문제가 발생했는데 이 하드디스크를 마운트 해줘야 사용이 가능하다


먼저 터미널을 열고 su - 입력 후 관리자 계정으로 변경한다.


그리고 fdisk -l 을 쳐서 드라이브를 확인해본다.



맨위에 /dev/sdb 경로에 1000.2 GB 드라이브 정보가 나타났다. 이 디스크를 마운트 해야한다.



마운트 하기전 디스크를 포맷해주고 파티션을 잡아야 한다.


fdisk [디스크 경로] 입력


위 정보에서 디스크 경로가 /dev/sdb 이므로


fdisk /dev/sdb 입력



먼저 파티션을 삭제해야 하므로 d 를 입력해준다.(파티션이 있다면)


그리고 파티션을 새로 추가하기 위해 n을 입력 후 


partition type은  p 를 입력


다음에 나오는 디스크 설정값은 그냥 입력하지 않고 엔터쳐서 진행한다.


파티션이 추가되면 w 를 눌러 저장하고 빠져나온다.


관련 옵션은 m을 입력하면 옵션에 대한 설명이 나타난다.

▲옵션 설명



이제 디스크 포맷을 해줘야 하는데 디스크 형식을 알아야한다.


vi /etc/fstab 을 열어 확인해보는데 없다면


blkid 를 실행하여 해당경로 디스크의 type을 확인한다.




확인했다면 ext4 형식이므로


mkfs.ext4 /dev/sdb 


를 입력하여 포맷한다.


▲포맷 결과



포맷이 끝나고 나면 마운트를 해주어야 한다.


그 전에 마운트 할 폴더를 만들어주어야 한다.


root 폴더로 이동하여 mkdir [폴더명] 을 입력하여 폴더를 만들어준다.


ex) mkdir data



▲root 경로에 data 폴더를 생성한모습



위 사진을 보면 [root@localhost ~] 이렇게 되어있는데 ~ 이 아닌 / 가 되어야 root 경로이다.


그래서 cd .. 으로 끝에 / 로 바뀐 걸 볼 수 있다.


이제 폴더에 권한을 주어야 하는데 


ls -al 명령어로 data 폴더의 권한을 살펴보면



이렇게 나타난다. 


저 문자가 나타내는 건 아래 표에 나와있다.



참고 링크 http://www.mireene.com/webimg/linux_tip1.htm




즉 현재 data 폴더는 755 상태로 제3자는 읽고 실행만 가능한 상태이다.


원활한 작업을 위해 제 3자에게도 권한을 주도록 777 변경해주어야 한다.


변경 명령어로는 


chmod 권한숫자 폴더명 으로 해주면된다.


chmod 777 data 


이렇게 해주고 다시 확인을 해보면 다음과 같이 나타날 것이다.


▲777로 변경된 모습



폴더 권한 변경 완료 후 이제 마운트를 해주어야 한다.


마운트 명령어는


mount -t [파일시스템형식] [파티션명] [마운트할위치]  로 해주면 된다.


위에서 파일시스템 형식은 ext4 로 확인하였으니


mount -t ext4 /dev/sdb /data


명령어로 마운트 해준다.




마운트 했다면 /dev/sdb 의 uuid를 fstab 파일에 등록해주어야 한다.


마운트 하고 나면 uuid 가 바뀌는? 듯 하여 다시 한번 확인해준다.


blkid 또는 ls -l /dev/disk/by-uuid 를 입력하여 확인





uuid를 확인했다면 


vi /etc/fstab


을 입력하여 파일을 연다.




▲마지막에 uuid를 추가해준 모습



uuid와 마운트경로(/data), 파일형식(ext4)만 수정해주고 등록해준다.


*참고사항 vi 문서 편집시 i 를 누르면 입력모드로 바뀌며 편집이 끝났다면 esc키를 누른다음 :wq 를 입력하여 저장 후 빠져나올 수 있다.


참고 링크 https://www.linux.co.kr/linux/vi/vi.html#12 에서 vi 편집 명령어 확인할 수 있다.



이제 마운트가 잘되었는지 df -h 로 확인해본다.




마지막에 /dev/sdb 가 보인다. 확인했으니 재부팅을 한다.


재부팅을 하고나서 파일을 보면..





왼쪽 장치목록에 1TB 볼륨이 사라진 걸 볼 수 있고 data 폴더 속성에서 용량을 보면 1TB 볼륨의 크기만큼 잡혀있는 걸 볼 수 있다. 


이로써 마운트 작업이 끝났다



반응형
반응형




안드로이드 체크박스를 이용하여 액티비티간 값 전달하기


필요한 코드만 적어서 이대로 실행하면 에러가 나므로 알맞게 수정이 필요함


check.xml 에 체크박스 선언



<CheckBox
    android:id="@+id/option1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp" />

<CheckBox
    android:id="@+id/option2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp" />



CheckActivity.java 에서 체크했을 때 동작 코드 추가


public class CheckActivity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 액티비티 생성 setContentView(R.layout.check);// check.xml //버튼 선언 Button button=(Button)findViewById(R.id.button_result); button.setOnClickListener(this); // option1 체크박스가 눌렸을 때 findViewById(R.id.option1).setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Checked(v); // 체크되었을 때 동작코드 } }); // option2 체크박스가 눌렸을 때 findViewById(R.id.option2).setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Checked(v); // 체크되었을 때 동작코드 } }); } public String Checked(View v) { // 체크되었을 때 동작할 메소드 구현 // TODO Auto-generated method stub CheckBox option1 = (CheckBox) findViewById(R.id.option1); // option1체크박스 // 선언 CheckBox option2 = (CheckBox) findViewById(R.id.option2); // option1체크박스 // 선언 String resultText = ""; // 체크되었을 때 값을 저장할 스트링 값 if (option1.isChecked()) { // option1 이 체크되었다면 resultText = "option1"; } if (option2.isChecked()) { resultText = "option2"; // option2 이 체크되었다면 } return resultText; // 체크된 값 리턴 } @Override public void onClick(View v) { if (v.getId() == R.id.button_result) { //button_result 이라는 버튼이 생성되었다고 가정. Intent it = new Intent(this, MainActivity.class); // MainActivity.java로 보내기 위한 인텐트 선언 it.putExtra("it_check", Checked(v)); // it_check 라는 이름하에 체크된 값을 전달 startActivity(it); // MainActivity.java를 실행하면서 값을 전달 } } }



MainActivity.java에서 값 전달 받기



public class MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//액티비티 생성 setContentView(R.layout.main);//main.xml Intent it=getIntent(); //인텐트 받기 선언 //이전에 보냈던 it_check의 값을 받아 str에 저장 String str= it.getStringExtra("it_check"); //즉 str = "option1" 또는 "option2" 가 들어있음 //이 값을 이용하여 필요한 동작 구현 if(str.equals("option1"){ //str 값이 option1 이라면 //필요한 동작 코드 작성 }else if(str.equals("option2"){ //str 값이 option2 라면 //필요한 동작 코드 작성 } } }


동작 순서는 check.xml -> CheckActivity.java -> MainActivity.java 이렇게 된다






반응형
반응형




Android library projects cannot be launched 에러가 발생한다면


프로젝트 우클릭 > propertise > Android 탭을 보면 다음과 같은 화면이 나타나는데


Is Libaray 체크 해제해주면 된다.



반응형
반응형

참고링크

http://biig.tistory.com/37


당황하지 않고

로그캣에서


Caused by: java.lang.NullPointerException: println needs a message

at android.util.Log.println_native(Native Method)

at android.util.Log.d(Log.java:138)

at com.example.eerrortest.MainActivity.onCreate(MainActivity.java:16)



Caused by 부분을 주목하고 그 밑에 해당 액티비티에 에러 라인을 보고 해결하면된다.

반응형
반응형







셀레니움 JAVA 버전 jar 라이브러리 다운로드 후 프로젝트에 추가

http://docs.seleniumhq.org/download/



2.44.0 클릭하여 다운로드



프로젝트에 추가하는 방법

프로젝트 우클릭 > Properties > Java Build Path > Add External JARs.. 클릭 후 해당 라이브러리 선택하여 추가



크롬브라우저 용 드라이버 파일

chromedriver.exe


실행 동영상





소스코드



package work2;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;

@FixMethodOrder (MethodSorters.NAME_ASCENDING)

public class INTest {
	private static WebDriver driver;
	String Title = null;
	String URL = null;
	String alertText = "";

	@BeforeClass
	public static void setUp() throws Exception {
		System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); //크롬 드라이버 파일 경로설정
		driver = new ChromeDriver();
		driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //응답시간 5초설정
		driver.get("http://www.naver.com");  //접속할 사이트
	}

	@Test
	public void Step_01_지식인_로그인_Test () throws Exception {
		
		driver.findElement(By.id("svc.kin")).click();    //지식인 클릭
		driver.findElement(By.id("login_btn")).click();  //NAVER로그인 클릭

		driver.findElement(By.id("id")).sendKeys("ID");  //ID
		driver.findElement(By.id("pw")).sendKeys("PASSWORD"); //비번
		driver.findElement(By.className("int_jogin")).click(); //로그인 버튼 클릭

	}
	@Test
	public void Step_02_임시저장_Test () throws Exception {
		
		
		for(String Handle : driver.getWindowHandles())  //새창으로 스위칭
			driver.switchTo().window(Handle);
		driver.findElement(By.xpath("//*[@id='main_top_2']/div[1]/fieldset[1]/div/a/img")).click();//질문하기 클릭
		
		driver.switchTo().frame("editor");  //질문하기 입력창 iframe으로 스위칭
		
		driver.findElement(By.xpath("//*[@id='title']")).sendKeys("원투쓰리포"); //제목입력
		driver.switchTo().frame("SmartEditorIframe"); 						//내용입력 창 iframe 스위칭
		driver.findElement(By.cssSelector("body")).sendKeys("일이삼사");		//내용입력
		
		driver.switchTo().defaultContent();									//스위칭 초기화
		//다시 질문하기 창 iframe 스위칭
		driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); 
		
		
		
		driver.findElement(By.xpath("//*[@id='au_submit_button']/div[2]/a[1]/img")).click();  //임시저장 클릭
		
		String num = driver.findElement(By.id("temporary_save_count")).getText();	//현재 임시저장 글 수 카운트 추출
		
		Thread.sleep(1000);		//너무 빨라 얼럿 창 노출이 안되는 걸 방지하기 위해 슬립 추가
		
		Alert alert = driver.switchTo().alert();			//얼럿 창으로 스위칭
		alertText = alert.getText();						//얼럿 창 메시지 추출
		alert.accept();										//얼럿 창 확인 클릭
		System.out.println(alertText);						//얼랏 창 메시지 출력
		
		Thread.sleep(1000);
		
		System.out.println("임시저장 글 개수 : "+num);
		
		driver.findElement(By.xpath("//*[@id='title']")).clear();		//질문 제목 삭제
		driver.findElement(By.xpath("//*[@id='title']")).sendKeys("파이브식스세븐에잇");	//질문 다시 입력
				
		
		
		driver.switchTo().frame("SmartEditorIframe");					//내용 입력 창 iframe 스위칭
		driver.findElement(By.cssSelector("body")).sendKeys("오육칠팔");	//내용입력
		driver.switchTo().defaultContent();								//창 스위칭 초기화
		//다시 질문하기 창 iframe 스위칭
		driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']")));	
		
		Thread.sleep(1000);
		

	}
	
	@Test
	public void Step_03_다음단계_Test () throws Exception {
		driver.findElement(By.xpath("//img[@alt='다음단계']")).click(); //다음단계 버튼 클릭
		
		//카테고리
		Thread.sleep(1000);
		driver.findElement(By.linkText("디렉토리 직접 선택")).click(); 	//디렉토리 직접선택 클릭
		
		
		Select dropdown = new Select(driver.findElement(By.id("choose_dir_d1")));  //첫번째 셀렉 박스를 가져옴
		dropdown.deselectAll();					//선택 모두 초기화
		dropdown.selectByValue("1");			//value 1인 값을 선택
		
		
		dropdown = new Select(driver.findElement(By.id("choose_dir_d2")));		//두번째 셀렉박스 가져옴
		dropdown.deselectAll();													//이하 동일
		dropdown.selectByValue("101");		
		
		dropdown = new Select(driver.findElement(By.id("choose_dir_d3")));
		dropdown.deselectAll();
		dropdown.selectByValue("10103");
		
		dropdown = new Select(driver.findElement(By.id("choose_dir_d4")));
		dropdown.deselectAll();
		dropdown.selectByValue("1010303");
		
		Thread.sleep(1000);
		
		driver.switchTo().defaultContent();				//창 스위칭 초기화
		//질문하기 창 iframe 스위칭
		driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']")));	
		driver.findElement(By.xpath("//*[@id='au_submit_button2']/div[2]/a[1]/img")).click();//임시저장 클릭
		
		Thread.sleep(3000);
		
		Alert alert = driver.switchTo().alert();		//얼럿 창 스위칭
		alertText = alert.getText();
		alert.accept();									//얼럿 확인 클릭
		System.out.println("다른제목으로 "+alertText);
		
		String num = driver.findElement(By.id("temporary_save_count")).getText();  //임시저장 카운트 추출
		System.out.println("임시저장 글 개수 : "+num);
		
		
		

	}
	
	@Test
	public void Step_04_이전_글_임시저장_삭제_Test () throws Exception {
		
		// 임시저장 창
		driver.findElement(By.className("_tempsave_open_close")).click();   //임시저장 글 클릭

		driver.switchTo().defaultContent();									//창 초기화
		driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); //질문하기 iframe 창 스위칭

		String info = driver.findElement(By.className("info_tempsave")).getText(); //임시저장 창 안내 글 추출
		System.out.println("임시저장 창 " + info);

		WebElement tempList = driver.findElement(By.className("tempsave_list")); //임시저장 글 목록 가져옴
		List<WebElement> list = tempList.findElements(By.className("q_on"));   	//목록을 리스트에 넣어둠

		//이전 글이니까 2번째인 1번 목록 삭제 버튼을 클릭
		list.get(1).findElement(By.tagName("img")).click();
		Thread.sleep(3000);
		Alert alert = driver.switchTo().alert();			//삭제 확인 얼럿 창
		alertText = alert.getText();
		alert.accept();										//확인 클릭
		System.out.println("이전" + alertText);

		
		
	}
	
	@Test
	public void Step_05_임시저장_삭제_Test () throws Exception {
		/*******이전 글 삭제와 동일*******/
		driver.switchTo().defaultContent();								
		driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']")));

		WebElement tempList1 = driver.findElement(By.className("tempsave_list"));
		List<WebElement> list1 = tempList1.findElements(By.className("q_on"));

		//여기서 현재글 삭제를 위해 1번째인 0번째 목록 삭제버튼 클릭
		list1.get(0).findElement(By.tagName("img")).click();	
		Thread.sleep(3000);
		Alert alert = driver.switchTo().alert();
		alertText = alert.getText();
		alert.accept();
		System.out.println(alertText);

		Thread.sleep(1000);

		String num = driver.findElement(By.id("temporary_save_count")).getText();
		System.out.println("임시저장 글 개수 : " + num);

		Thread.sleep(1000);
		
		
	}
	
	

	@AfterClass
	public static void tearDown() throws Exception {
		driver.quit();
	}

}




반응형
반응형




파일 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

+ Recent posts