프로그래밍

코린이 파일 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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
5689 [프로그래밍] 엥 구글 플러터 유기각 재는거임?? 4 최수연 0 14 시간 전 179
5688 [프로그래밍] 반도체 장비 업계인 있음? 9 캡틴띠모 0 1 일 전 205
5687 [프로그래밍] 안드로이드 책 추천좀 6 집에가게해줘 0 2 일 전 125
5686 [프로그래밍] 폰 스크리닝 해 본 사람 있어? 3 무지개빛푸딩 0 2 일 전 356
5685 [프로그래밍] jsp 트리메뉴 만들고있는데 구상한게가능한지 의견좀물어볼께 11 평택국 0 3 일 전 142
5684 [프로그래밍] JPA 도와줘어억 ㅠ 10 모그리또 0 3 일 전 221
5683 [프로그래밍] 의사는 뽑는 인원 제한하는데 부캠은 왜 제한 안 할까 5 조강현 0 5 일 전 350
5682 [프로그래밍] 그 혹시 게임쪽 종사자 있음? 17 god79ii 0 9 일 전 616
5681 [프로그래밍] 코린이 ㅅㅂ 뭐가 문젠지 모르겠어요 9 집에가게해줘 0 9 일 전 436
5680 [프로그래밍] Dear Imgui 라고 아시나요? 2 년째모쏠 0 9 일 전 239
5679 [프로그래밍] 현업개발자분들 주말엔 편하게 쉴수있나요? 10 키로 0 10 일 전 841
5678 [프로그래밍] 무엇이든 물어보세요. 28 변현제 0 12 일 전 404
5677 [프로그래밍] 개발자보단 엔지니어가 취업이 잘됨 5 iillillill 2 13 일 전 713
5676 [프로그래밍] 프론트엔드 개발자 연봉 1억 넘는 사람 있어? 13 잠적자 0 13 일 전 622
5675 [프로그래밍] Exiftool 이거 일본어 못 읽는데 13 부터시작하는이세... 0 15 일 전 231
5674 [프로그래밍] 반응형 웹페이지가 내가상상한거랑 좀 다르네 4 평택국 0 16 일 전 442
5673 [프로그래밍] 고졸 FE개발자 연봉, 상황에 조언좀.. 19 쾅꿍꿍 0 16 일 전 596
5672 [프로그래밍] 물경력들 보면 책임을 이해못하는것같음 5 mils 1 17 일 전 407
5671 [프로그래밍] GPT가 코딩 다해주네 3 겜신병자 0 17 일 전 739
5670 [프로그래밍] 크로스플랫폼의 욕심은 끝이없다 4 ye 0 20 일 전 397