Android

[안드로이드/데이터 관리] Raw 파일 읽어오기

gangmini 2023. 4. 29. 00:27
반응형

Raw 데이터

  • 가공되지 않은 원천(순수) 데이터 <-> 사운드,동영상, 사진 등의 데이터를 줄이기 위해 압축한 데이터이므로 가공된 데이터
  • 하지만 안드로이드에서는 몇가지 XML 파일과, 이미지를 제외한 모든 데이터를 raw 데이터(각종 데이터 파일이나 동영상, 사운드)라고 정의
  • xml, 이미지 파일은 res 폴더에 넣고 바로 사용, raw 데이터는 raw 폴더에 넣어 처리를 해서 사용
  • 앱 내부에 포함되어 있기 때문에 읽기만 가능 (내부에 있어도 내부 저장소랑은 다른 곳에 있음) -> 넣고 싶으면 raw 폴더에 저장하면 됨
  • 스트림을 통해 쉽게 추출
  • raw 폴더 안에 들어가는 파일은 무조건 소문자, 숫자로만 구성되어 있어야 함

텍스트 파일 출력하기

binding.button.setOnClickListener {
    // 스트림 : 앱과 외부의 파일, 네트워크, 블투 장비등 외부의 요소들과 데이터를 주고 받기 위해 사용하는 객체
    // 흔히 스트림을 수도꼭지에 비유하는 것 같은데 외부의 water가 울 집으로 들어오는 경로이므로 나름 괜춘한 비유일지도ㅎ
    // 스트림 추출
    val inputStream = resources.openRawResource(R.raw.data1) // resources 객체가 res 폴더의 파일들 관리
    // data1 파일을 열고 그 파일과 연결되어 있는 스트림 반환
    // 데이터의 종류나 양식에 따라 처리 달라질 수 있음
    val isr = InputStreamReader(inputStream, "UTF-8") //파일로부터 읽어온 문자열을 utf-8 형식으로 디코딩해 원본 글자로 변환
    val br = BufferedReader(isr) // 라인 단위로 읽어옴

    var str:String? = null
    val sb = StringBuffer()

    do {
        str = br.readLine()
        if (str != null) {
            sb.append("${str}\n")
        }
    }while (str != null)

    br.close() //leaking 보안 문제였나....권한상승 문제 발생했던 것 같음...
    //isr.close()
    //br.close()

    binding.textView.text = sb.toString()
}

 

사운드 파일 재생하기

  • 제공하고 있는 MediaPlayer 클래스를 이용해 쉽게 재생
binding.button2.setOnClickListener {
    if (mp == null) {
        mp = MediaPlayer.create(this, R.raw.song) //파일 없으면 null일 수 있음
        mp?.start()
    }
}


binding.button3.setOnClickListener {
    if (mp != null) {
        mp?.stop()
        mp = null
    }
}

* 사운드가 들리지 않는다....오류는 나지 않고, 혹시 몰라서 mp3/mp4 확장자 모두 해봤는데 소리가 안 난다.... (애뮬레이터만의 문제일 수 있어서 나중에 실제 단말기 연결도 해봐야겠다. 가뜩이나 노잼인 스트림 파일입출력~ 안 되니까 해결하기 드럽게 실타...ㅎ)

동영상 파일 재생하기

  • VideoView 라는 View를 사용해야 함
  • VideoView는 재생할 영상이 있는 파일의 경로를 직접 설정해야 함 -> 서버의 경로를 넣으면 영상이 스트리밍 되는 것!
// 영상 재생하기
binding.button4.setOnClickListener {
    if (binding.videoView.isPlaying == false) {
        // 영상 파일의 경로
        val uri = Uri.parse("android.resource://${packageName}/raw/video")
        binding.videoView.setVideoURI(uri)
        binding.videoView.start()
    }
}

// 영상 정지하기
binding.button5.setOnClickListener {
    if (binding.videoView.isPlaying == true) {
        binding.videoView.stopPlayback()
    }
}

 

* 파일 열기나 스트림 등에 대한 지식이 너무 부족한 것 같다....1학년때 자바 시간에 조금 들었었는데 기본도 없는 상태에서 그렇게 좋은 수업을 듣지도 못했던 슬푼 과거,,,,, 그래서 따로 좀 공부하고 정리해보도록 하자!!

 

반응형