코틀린에서 외부저장소에 있는 텍스트 파일을 읽을 수 가 없습니다.

조회수 362회

코틀린을 통해 외부저장소에 있는 텍스트 파일 읽어오는 기능을 만들고 있습니다. manifest파일에서 허가 태그를 추가하고 옵션을 변경해도 다음과 같은 에러가 뜨면서 텍스트 파일을 가져올 수 가 없습니다. 어떻게 해결할 수 있을까요?

에러내용

java.lang.IllegalArgumentException: File content://com.android.externalstorage.documents/document/primary%3ADocuments%2Ftest.txt contains a path separator

코틀린 파일

class MainActivity : AppCompatActivity() {

    val getTextCode:Int = 2

    override fun onCreate(savedInstanceState: Bundle?) {
        val vBinding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        setContentView(vBinding.root)

        vBinding.getFromTxt.setOnClickListener {
            val downUri = Uri.parse("/storage/self/primary/Documents")
            openFile(downUri)
        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == getTextCode && resultCode == Activity.RESULT_OK) {
            try{
                data?.data?.also { uri ->
                    Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show()
                    Log.d("test", uri.toString())
                    openFileInput(uri.toString()).bufferedReader().useLines{ lines->
                        Log.d("test", lines.toString())
                    }
                }
            }catch(err:Exception){
                Log.d("test", err.toString())
            }
        }
    }

    private fun openFile(pickerInitialUri: Uri){
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
            addCategory(Intent.CATEGORY_OPENABLE)
            type = "text/*"
            putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
        }
        startActivityForResult(intent, getTextCode)
    }

}//MainActivity닫힘

manifest파일

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.questionbank">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.QuestionBank"
        android:requestLegacyExternalStorage="true"
        >
        <activity
            android:name=".EditActivity"
            android:exported="false" />
        <activity
            android:name=".TestActivity"
            android:exported="false" />
        <activity
            android:name=".PrintActivity"
            android:exported="false" />
        <activity
            android:name=".InputActivity"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>



</manifest>

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)