프로그래밍

코린이 파일 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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180678 [컴퓨터] 공유기 때문에 미치겠는데 이런 현상 겪어본 사람 있음?? 누골 0 5 분 전 7
180677 [잡담] 독거미 오테뮤 저소음축 방금와서 지금 쓰는 중인데 닼린이 0 7 분 전 4
180676 [견적] 이륙하는게 낳아 안하는게 낳아? 5 뚜루뚜뚜뚜 0 1 시간 전 43
180675 [잡담] 갑자기 유튜브 버벅거리고 렉걸리는데 왜그럼? 2 냐아옹 0 1 시간 전 23
180674 [모바일] s24+ 갑자기 진동이 안되는데 뭐임... 2 하츠네 미쿠 0 2 시간 전 87
180673 [컴퓨터] 철권으로 인텔 뿔딱 검증이 이거 말하는거임 ? 10 렙만큼관심있음 1 3 시간 전 94
180672 [컴퓨터] 컴하하하하!!!! 컴터고쳤다!! 꺄꺄룽 0 3 시간 전 48
180671 [컴퓨터] PBO2 tuner 이거 왜이럼 ㅠㅠ 아그러쿠나 0 3 시간 전 28
180670 [컴퓨터] 컴잘알분들 답변 부탁드립니다. 2 년차개충 0 3 시간 전 23
180669 [컴퓨터] 컴린이 견적 및 호환 질문입니다! 6 응너아니야 0 4 시간 전 36
180668 [잡담] 갤럭시핏3 착용감 엄청 좋네 3 손씨네원조비빔밥 0 5 시간 전 126
180667 [프로그래밍] 윈도우 부팅화면 봐주실분 바나나맛두부 0 5 시간 전 82
180666 [컴퓨터] 케이스 팬 장착 어려울까요? 5 노호야 0 7 시간 전 55
180665 [컴퓨터] 윈도우 11 구매하려고하는데 5 바나나사탕 0 7 시간 전 102
180664 [컴퓨터] 이정도 스펙이면 4k 게임 잘 돌아갈까? 4 뽀삐뽀삐 0 9 시간 전 109
180663 [컴퓨터] SSD를 마이그레이션 떴는데 부팅 선택이 안됨 2 참치는동원 0 14 시간 전 90
180662 [컴퓨터] 이제 논KCPU는 기본쿨러+HB보드로만 조립해야할듯 1 Vv연옥의사신vV 0 15 시간 전 132
180661 [컴퓨터] 중국 모니터 살까 생각중임 6 너가전부옳아 0 16 시간 전 180
180660 [컴퓨터] 얼마전에 고장나서 다 뒤집어깠다던 개붕이인데 1 밀실심사 0 17 시간 전 132
180659 [잡담] 스피커 소리가 안ㄴ남 ㅜㅜ 도움!! 匠人 0 18 시간 전 48