Assets
- raw 데이터 파일은 raw 폴더에 담으면 스트림을 손쉽게 추출할 수 있다는 장점이 있다.
- 허나 raw 폴더는 하위 폴더를 만드는 등 계층적으로 관리할 수 없다.
- 만약 파일들을 계층적인 폴더 구조를 만들어 관리하겠다면 assets 폴더를 사용한다. -> 하위 폴더를 생성 할 수 있다
- assets 폴더는 res 폴더 내부가 아니므로 리소스(R 클래스)로 관리할 수 없다.
1. 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"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="파일 데이터 가져오기" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="폰트적용하기" />
</LinearLayout>
2. MainActivity
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.run{
button.setOnClickListener {
// Assets 폴더에 있는 파일과 연결된 스트림을 추출한다.
// - 가져올 파일의 정확한 위치를 가져와야한다
// - Assets 폴더는 하폴더를 생성이 가능하다
val inputStream = assets.open("text/data.txt")
val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
val bufferedReader = BufferedReader(inputStreamReader)
var str:String? = null
val stringBinding = StringBuffer()
do{
str = bufferedReader.readLine()
if(str != null){
stringBinding.append("${str}\n")
}
}while(str != null)
bufferedReader.close()
textView.text = stringBinding.toString()
}
button2.setOnClickListener {
// Assets 폴더에 있는 폰트 파일을 이용해 폰트 객체를 생성한다.
val typeFace = Typeface.createFromAsset(assets, "fonts/NanumBrush.ttf")
// TextView에 적용한다.
textView.typeface = typeFace
textView.textSize = 50.0f
}
}
}
}
val inputStream = assets.open("text/data.txt")
val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
val bufferedReader = BufferedReader(inputStreamReader)
- val inputStream = assets.open("text/data.txt")
- assets 폴더에 있는 파일과 연결된 스트림을 추출합니다.
- "text/data.txt"는 Assets 폴더 내부에 있는 data.txt 파일을 가리키는 경로입니다.
- assets.open() 메서드를 사용하여 해당 파일에 접근하는 inputStream을 얻을 수 있습니다.
- val inputStreamReader = InputStreamReader(inputStream, "UTF-8")
- inputStream을 UTF-8 문자 인코딩으로 읽을 수 있는 InputStreamReader로 변환합니다.
- val bufferedReader = BufferedReader(inputStreamReader)
- InputStreamReader를 BufferedReader로 감싸서 한 줄씩 데이터를 읽을 수 있도록 합니다.
[결과]
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님
'안드로이드 앱 스쿨 2기 > Android' 카테고리의 다른 글
[12주차 - 금] 9 patch 이미지 (0) | 2023.07.14 |
---|---|
[11주차 - 수] SQLIteDataBase (0) | 2023.07.06 |
[11주차 - 수] Raw (0) | 2023.07.05 |
[11주차 - 화] FileStream (0) | 2023.07.04 |
[11주차 - 화] Application Class (0) | 2023.07.04 |