본문 바로가기
안드로이드 자바

[Java][Android] AssetManager를 활용하여 앱 내 에셋 파일에 접근하기

by teamnova 2025. 7. 1.
728x90

안드로이드 앱을 개발하다 보면 이미지, 텍스트 파일, 폰트, JSON 데이터 등 다양한 정적 리소스를 앱 패키지 내부에 포함시켜야 할 때가 있습니다. 이 파일들을 인터넷에서 다운로드하거나 외부 저장소에 저장하는 대신, 앱 자체에 번들링하여 언제든지 쉽게 접근하고 싶을 때 유용한 것이 바로 AssetManager입니다.

 

이번 포스팅에서는 AssetManager를 사용하여 앱의 assets 폴더에 있는 파일에 접근하고 내용을 읽어오는 방법을 MainActivity.java와 activity_main.xml 두 파일만을 사용하여 간단하게 구현해 보겠습니다.

 

우선 assets 폴더를 생성하고 파일을 추가해보도록 하겠습니다.

 

 

1. Project 뷰에서 app/src/main 디렉터리를 마우스 오른쪽 버튼으로 클릭합니다.

2. New -> Folder -> Assets Folder를 선택합니다.

3. Target Source Set은 기본값인 main을 그대로 두고 Finish를 클릭합니다.

4. 그러면 app/src/main/assets 경로에 assets 폴더가 생성됩니다.

 

그리고 해당 폴더에 my_asset_file.txt 파일을 생성하고 원하는 내용을 입력 후 저장합니다. 

 

이번 예제에서는 
[이것은 assets 폴더에 있는 텍스트 파일입니다. AssetManager를 통해 성공적으로 읽어왔습니다!]
라는 내용의 텍스트를 저장했습니다.

 

전체 코드입니다.

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:gravity="center"
  android:padding="16dp"
  tools:context=".MainActivity">

  <TextView
    android:id="@+id/asset_content_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:textSize="15sp"
    android:textColor="@android:color/black"
    android:padding="8dp"
    android:background="#F0F0F0"
    tools:text="에셋 파일 내용이 여기에 표시됩니다."/>

</LinearLayout>

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

  private TextView assetContentTextView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    assetContentTextView = findViewById(R.id.asset_content_text_view);

    // AssetManager를 사용하여 에셋 파일 읽기
    readAssetFile("my_asset_file.txt");
  }

  private void readAssetFile(String fileName) {
    AssetManager assetManager = getAssets(); // AssetManager 인스턴스 얻기
    InputStream inputStream = null;
    BufferedReader reader = null;
    StringBuilder stringBuilder = new StringBuilder();

    try {
      // AssetManager.open()을 사용하여 InputStream 얻기
      inputStream = assetManager.open(fileName);
      reader = new BufferedReader(new InputStreamReader(inputStream));
      String line;

      // 파일 내용을 한 줄씩 읽어 StringBuilder에 추가
      while ((line = reader.readLine()) != null) {
        stringBuilder.append(line).append("\n"); // 줄바꿈 문자 추가
      }

      // TextView에 읽어온 내용 표시
      assetContentTextView.setText(stringBuilder.toString());

    } catch (IOException e) {
      e.printStackTrace();
      // 파일 읽기 실패 시 에러 메시지 표시
      assetContentTextView.setText("에셋 파일 읽기 실패: " + e.getMessage());
    } finally {
      // 사용한 리소스는 반드시 닫아주어야 합니다.
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (inputStream != null) {
        try {
          inputStream.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }
}

 

 

시연 결과입니다.