프로그래밍

코린이 파일 Uri 관련 질문

ACTION_CREATE_DOCUMENT를 이용해서 엑셀 파일을 만들고 FileOutPutStream에 전달하면

파일 또는 디렉토리를 찾을 수 없다고 뜨는 문제가 있어서 질문하러 왔습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private fun exportToExcel(){
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "*/xlsx"
        val excelFileName = NTPTime.date!!.replace(".",""+ "_" +
            NTPTime.time!!.replace(":"""+ ".xlsx"
        putExtra(Intent.EXTRA_TITLE, excelFileName)
    }
 
    getFilePath.launch(intent)
}
 
val getFilePath: ActivityResultLauncher<Intent> = registerForActivityResult(    
    if(result.resultCode == RESULT_OK && result.data != null){
        lifecycleScope.launch(Dispatchers.IO){
            val workbook = createWorkbook()
            createExcelFile(workbook, result.data?.data!!)
        }
    }
}
 
 
private fun createExcelFile(ourWorkbook: Workbook, fileUri: Uri) {
    try {
        val excelFile = File(fileUri.encodedPath)
        val fileOut = FileOutputStream(excelFile) // 오류
        ourWorkbook.write(fileOut)
        fileOut.close()
    } catch (e: FileNotFoundException) {
        e.printStackTrace() // 파일 또는 디렉터리를 찾을 수 없음
    } catch (e: IOException) {
        e.printStackTrace()
    }
}
cs

 

 

createExcelFile에있는 FileOutputStream에 fileUri.toFile()을 하든, 그냥 path, fileUri.toString() 뭘 하든 다 오류 발생하고

excelFile에는 파일이 있습니다.

WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE

권한 모두 준 상태입니다.

 

 

 

 

 

 

 

 

 

20개의 댓글

2024.03.03

ide 테마 진짜 꿀밤마렵네 코드 보이긴하냐?

0
2024.03.03
@tolabose

와씨;; 어둡게 했어서 몰랐네 ㅜㅜㅜ 다시 올릴께 ㅋㅋㅋㅋㅋㅋㅋ

0
2024.03.03

fileUri 존재함?

0
2024.03.03
@슈카임

fileUri는 있어

0
2024.03.03
@집에가게해줘

Encodedpath 이게 있어?

0
2024.03.03
@슈카임

ㅇㅇ 있기는 한데

UriFile.toString() 값, path값, encodedPath값 다 적어볼께 잠깐만...

0
2024.03.03
@슈카임

fileUri.toString(): content://com.android.externalstorage.documents/document/home%3A20240303_221343_%EC%B6%9C%ED%87%B4%EA%B7%BC%EC%9D%BC%EC%A7%80.xlsx

 

fileUri.path: /document/home:20240303_221343.xlsx

 

encodedPath: /document/home%3A20240303_221343_%EC%B6%9C%ED%87%B4%EA%B7%BC%EC%9D%BC%EC%A7%80.xlsx

 

이렇게 나옴

0
2024.03.03
@집에가게해줘

/document/home:20240303_221343.xlsx

 

: 이게 가능한가?

0
2024.03.04
@슈카임

씻고 잘 준비 하느라 늦게 봤네 미안..

나도 그건 이상하다 생각했는데 excelFile에 값 있길래 "아.. 안드로이드는 디렉토리랑 파일명 사이는 : 로 하나보네"하고 말았음

혹시 모르니 내일 저 부분만 수정해서 다시 해봐야겠다

0
2024.03.03
@슈카임

갑자기 생긴 궁금증인데 fileUri값이 없다면 val excelFile = File(fileUri.encodedPath) 여기서 오류가 나지 않았을까?

 

0
2024.03.03
@집에가게해줘

안날 수 있어

0
2024.03.03
@집에가게해줘

Uri가 지원을하냐고 물어본거임

0
2024.03.03
@집에가게해줘

근데 uri 인코딩한 패스가 필요한가? 걍 getpath 하면 안됨?

0
2024.03.03
@슈카임

그냥 path했는데 안되길레 혹시나 싶어 해본거임 ㅋㅋㅋ 일단 그냥 path도 안되긴 함

0
2024.03.03
@집에가게해줘

그 파일이름은 이미 존재하는거임?

0
2024.03.04
@슈카임

존재함 ㅇㅇ

Intent.ACTION_CREATE_DOCUMENTATION 할 때 파일 생성 페이지가 뜨고

사용자가 어느 위치에 어느 파일명으로 만들껀지 선택하고 나면 바로 파일 생성됨

파일 생성이 되고 나면 getFilePath가 실행됨

0
2024.03.04

contentResolver.openOutputStream(Uri)를 사용해보기 바람

0
2024.03.04
@힝거루

이걸로 안드로이드와 원만한 합의를 봤습니다.

 

먼저 ContentResolver를 이해하려면 ContentProvider(콘텐츠 공급자)를 알아야하는데

핵심 적인 부분만 얘기하자면

"콘텐츠 공급자는 데이터를 캡슐화하여 단일 ContentResolver 인터페이스를 통해 애플리케이션에 제공합니다." 입니다.

(https://developer.android.com/reference/android/content/ContentProvider)

 

리졸버는 애플리케이션 Content 모델에 대한 액세스를 제공해줍니다.

 

이 내용으로 보아 제가 생각하는 제 소스의 문제점은

ACTION_CREATE_DOCUMENT를 사용하면 안드로이드에서 제공하는 파일 생성 기능이 파일을 만들어주는데

이게 '내 애플리케이션'이 만든게 아니라 '안드로이드'에서 만든 것이므로 '내 애플리케이션'에서 접근할 수 없어

발생한 에러인거 같습니다.

 

같은 문제를 가지고 계신 분들이 있으실까봐 설명을 함께 적었는데 제가 이해한게 맞나요?

0
2024.03.04
@집에가게해줘

본문에 사용한 File은 자바 API이기 때문에 안드로이드에서 제공하는 추상화된 경로로는 접근할 수 없음.

 

이전에는 Uri를 절대경로로 변환하는 방법이 존재했지만 Scoped Storage가 적용되면서 사실상 절대경로로 접근하는 방법은 없다고 생각하면 됨.

0
2024.03.04
@힝거루

정확한 해설 ㄱㅅ

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180508 [모바일] 갤럭시 내비게이션바 업데이트 1 Inquisitive 0 28 분 전 33
180507 [모바일] 아이폰 이거 설정하는법 앎? 건들면6년 0 35 분 전 20
180506 [컴퓨터] 저전력,배터리 오래가는 노트북 찾아요! 3 sgfkshj 0 7 시간 전 113
180505 [잡담] 유튜브 프리미엄 우회 질문드립니당 3 개드립눈팅4년 0 8 시간 전 181
180504 [잡담] 블랙샤크v2 pro 2023 vs 소니 mv1 추천좀 게임게임하자 0 8 시간 전 65
180503 [컴퓨터] 인텔 그래픽 드라이버 최신화 인식 왜이따위임? 2 넌뭔데시비냐 0 9 시간 전 118
180502 [모바일] 안드로이드 카메라 어플중에 쓸만한거 뭐있음? 1 일째다이어트하는중 0 10 시간 전 64
180501 [컴퓨터] 집에서 투 컴퓨터 사용시 키보드 마우스 세팅 6 해물잠봉 0 11 시간 전 115
180500 [잡담] 동글 사려는데 싼거사도됨? 7 제로콜라는닥터페... 0 13 시간 전 115
180499 [컴퓨터] 가난개붕이 글카샀다 11 69746974 0 13 시간 전 212
180498 [컴퓨터] 로지텍 무선마우스가 g502x 이거 많이씀?? 10 울그락푸르락 1 14 시간 전 133
180497 [컴퓨터] DDR5는 렘오버한거 차이많이남? 15 창원토박이 0 16 시간 전 229
180496 [컴퓨터] 형들 제품키만 파는것들 써도 되는거야? 4 우루루옳지 0 16 시간 전 108
180495 [잡담] 시네빔 써본 개붕이 있어? 5 따뜻한젤라또 0 16 시간 전 55
180494 [컴퓨터] 다나와에서 컴터 하나 사려고하는데 6 바나나사탕 0 16 시간 전 65
180493 [잡담] 게이밍 노트북 중고 가성비 어때보임? 6 ST11223 0 17 시간 전 167
180492 [컴퓨터] 책상 인증 5 69746974 0 18 시간 전 187
180491 [컴퓨터] 프레임 고정하는 이유가 뭔가요? 5 우루루옳지 0 19 시간 전 174
180490 [모바일] 통신사에 공유기 교체해달라하면 해주나? 5 뱅갈고양이육성중 0 19 시간 전 151
180489 [모바일] 중고폰 선택장애 도와주세요 5 호래빙 0 19 시간 전 81