[Java] 임시파일 생성
자바에서 파일을 생성하고 관리할때, 임시파일을 생성하고 해당 프로세스가 종료되면 삭제되도록 하는 방법이 있다.
이 기능을 제공하는 메소드는 File.createTempFile() 와 File.deleteOnExit() 이다.
import java.io.File; import java.io.IOException; public class Main { public static void main(String[] args) { try{ // test_xxxxxxxxx.tmp 라는 임시파일을 생성한다. File tempfile = File.createTempFile("test_", ".tmp", new File("D:\\temp")); // 생성된 파일의 경로를 system.out 에 출력한다. System.out.println(tempfile.getAbsolutePath()); // 생성된 파일은 해당 프로세스가 종료될 때 지운다. tempfile.deleteOnExit(); // 5초 동안 멈춘다. Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
위의 코드를 실행하면 아래와 같이 파일이 생성되고 프로세스가 종료될 때 파일은 삭제된다.
[안드로이드] 문자열로 리소스 ID 및 리소스 획득
안드로이드에서 리소스(Resource)는 /res 폴더에 xml 파일로 정의하고 코드 상에서 R 클래스를 통해서 호출하여 사용한다.
- res/strings.xml 에 hello_world라는 리소스 이름을 정의
HELLO WORLD
- src/MainActivity.java 에서 R 클래스에 정의된 리소스 ID를 사용
protected void onCreate(Bundle savedInstanceState) { String msg = getResources().getString(R.string.app_description); // 또는 String msg = getString(R.string.app_description); }
위와같이 안드로이드에서 기본적으로 제공하는 방법외에 리소스 이름 (문자열)을 가지고 리소스 ID 직접 구할 수 있다.
- src/MainActivity.java 에서 리소스 이름(문자열)을 이용한 리소스 ID 구하여 사용
protected void onCreate(Bundle savedInstanceState) { String resName = "hello_world"; String type = "string"; String packageName = getPackageName(); int resId = getResources().getIdentifier(resName, type, packageName); String msg = getResources().getString(resId); }
getIdentifier 메소드의 인자 값들은 name, type, packageName 이며, 이 값들은 아래와 같다.
- name 은 R.type.name에서 name 부분을 말한다.
- type 은 R.type.name 에서 type 부분을 말한다.
- packageName 은 context 객체에서 getPackageName() 메소드로 획득한 패키지명을 말한다.
이 같은 코드는 주로 리소스 이름을 조합하여 리소스 ID 값을 획득하여 사용할 때 사용된다.
예를 들어, 연속되는 ImageView 를 img_view_1, img_view_2, img_view_3, img_view_4 로 정의하고 ImageView에 보여질 이미지 리소스를 img_1, img_2, img_3, img_4 로 정의한다면 다음과 같이 코드를 구현할 수 있다.
private void init() { int resId; String packageName = getPackageName(); for (int i = 0 ; i < 4 ; i++) { int resId = getResources().getIdentifier("img_"+i, "drawable", packageName); int viewId = getResources().getIdentifier("img_view_"+i, "id", packageName); (findViewById(viewId)).setImageResource(resId); } }