[kotlin] raw & assets

Leechaeyeon·2023년 7월 5일

raw 데이터

  • raw 데이터는 가공되지 않은 원천 데이터를 의미
  • 사운드나 동영상, 사진 등을 데이터의 용량을 줄이기 위해 압축을 하게 되는데 이러한 가공을 거치지 않은 순수 데이터 들을 raw 데이터
  • 안드로이드에서는 각종 데이터 파일이나 동영상, 사운드 등의 데이터를 사용할 때 주로 사용

raw 폴더

  • 실행 중 다운받거나 생성된 데이터 파일은 내부 저장소나 외부저장소에 저장해 두었다가 필요할 때 읽어오면 된다.
  • 만약 데이터가 저장된 파일을 애플리케이션 내부에 포함 시키겠다면 raw 폴더에 저장
  • raw 폴더에 저장된 파일은 스트림을 손쉽게 추출 가능
val inputStream = resources.openRawResource(R.raw.data1)

사운드 파일 재생하기

  • raw 폴더에 들어 있는 사운드 파일 재생은 매우 쉬움
mp = MediaPlayer.create(this, R.raw.song)
mp?.start()

동영상 파일 재생하기

  • 동영상 재생을 위해서는 **VideoView**라는 View를 사용
  • **VideoView**는 재생할 영상이 있는 파일의 경로를 직접 설정해야한다.
val uri = Uri.parse("android.resource://${packageName}/raw/video")
videoView.setVideoURI(uri)
videoView.start()

raw 데이터 단점

  • 하위 폴더를 만들 수 없음
  • 읽어오기만 됨

raw 사용

raw 폴더를 만들고 data이름의 폴더 안에 위와 같이 선언



activityMainBinding.run{
            button.setOnClickListener {
                // raw 폴더에 있는 파일과 연결된 스트림을 추출
                // res.raw에 있는 data라는 이름의 파일에 접근
                // 확장자가 아니라 이름으로 확인
                val inputStream = resources.openRawResource(R.raw.data)
                val inputStreamReader = InputStreamReader(inputStream,"UTF-8")
                val bufferdReader = BufferedReader(inputStreamReader)

                // 널을 허용하는 함수로
                var str:String? = null
                val stringBuffer = StringBuffer()

                do{
                    // 한줄을 읽어온다.
                    str = bufferdReader.readLine()
                    // 읽어온게 잇다면
                    if(str!=null){
                        // 쌓아준다.
                        stringBuffer.append("${str}\n")
                    }
                }while(str!=null)
                // 버퍼를 닫아준다.
                bufferdReader.close()

                textView.text = stringBuffer.toString()

            }
        }

raw 파일에 들어있는 사운드 재생 코드

 var mediaPlayer: MediaPlayer? = null
            // 사운드 재생하기
            button2.setOnClickListener {
                if(mediaPlayer == null){
                    // 사운드 재생 관리 객체를 생성한다.
                    mediaPlayer = MediaPlayer.create(this@MainActivity,R.raw.song)
                    // 재생한다.
                    mediaPlayer?.start()
                }
            }

            // 사운드 중지하기
            button3.setOnClickListener {
                if(mediaPlayer != null){
                    // 사운드를 중지시킨다.
                    mediaPlayer?.stop()
                    mediaPlayer = null
                }
            }

raw 파일에 들어있는 영상 재생 코드

 // 영상 재생하기
            button4.setOnClickListener {
                // ViewView가 재생중이 아니라면
                if(videoView.isPlaying == false){
                    // 영상 파일의 경로를 가져온다.
                    val uri = Uri.parse("android.resource://${packageName}/raw/video")
                    // 영상 주소를 설정한다.
                    videoView.setVideoURI(uri)
                    // 재생한다.
                    videoView.start()
                }

            }
            // 영상 중지하기
            button5.setOnClickListener {
                // viewview가 재생중이라면
                if(videoView.isPlaying == true){
                    // 영상 재생을 중지한다.
                    videoView.stopPlayback()
                }
            }

assets

  • raw 데이터 파일은 raw 폴더에 담으면 스트림을 손쉽게 추출할 수 있다는 장점이 있다.
  • 허나 raw 폴더는 하위 폴더를 만드는 등 계층적으로 관리할 수 없다.
  • 만약 파일들을 계층적인 폴더 구조를 만들어 관리하겠다면 assets 폴더를 사용한다.
  • assets 폴더는 res 폴더 내부가 아니므로 리소스(R 클래스)로 관리할 수 없다.

생성하기

val inputStream = assets.open("text/data2.txt")

폰트 사용하기

  • assets 폴더에는 다양한 종류의 파일들을 담고 사용할 수 있다.
  • 특히 폰트 파일을 손쉽게 사용할 수 있도록 클래스를 제공하고 있다.
val face = Typeface.createFromAsset(assets, "font/font1.ttf")
textView.typeface = face

0개의 댓글