반응형
Q OS 부터는 Scoped storage를 이용해야한다. (getExternalStorage같은 것들이 이용되지 않는다.)
이때 중요한건 해당 txt 파일이 강제로 집어넣은 txt파일이 아닌 ContentResolver로 저장된 파일들에 대해 탐색이 된다.
package com.example.myapplication;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.webkit.MimeTypeMap;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri uri = MediaStore.Files.getContentUri("external");
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.DATA
};
String selection = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
String[] selectionArgs = new String[] {
MimeTypeMap.getSingleton().getMimeTypeFromExtension("txt")
};
try (Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, null)) {
// 여러개 파일을 동시에 다읽고 싶다면 아래 코드에서 처리
/*
if (cursor != null && cursor.moveToFirst()) {
do {
int columnCount = cursor.getColumnCount();
System.out.println("KKw columnCount :: " + columnCount);
for (int i =0 ;i < columnCount; i++) {
System.out.println("KKw columnName :: " + cursor.getString(i));
}
} while(cursor.moveToNext());
}
*/
// 하나의 파일만 읽고 싶을때는 아래 코드에서 처리
if (cursor != null) {
cursor.moveToFirst();
int idColumn = cursor.getColumnIndex(MediaStore.Files.FileColumns._ID);
long id = cursor.getLong(idColumn);
Uri contentUri = Uri.withAppendedPath(
MediaStore.Files.getContentUri("external"),
String.valueOf(id));
System.out.println("Content Uri : " + contentUri);
System.out.println("Content Uri toString :" + contentUri.toString());
System.out.println("Content Uri getPath :" + contentUri.getPath());
String realUri = uri + File.separator + cursor.getString(0);
StringBuilder stringBuffer = new StringBuilder();
InputStream inputStream = getContentResolver().openInputStream(Uri.parse(realUri));
if(inputStream == null){
return;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuffer.append(line).append("\n");
}
System.out.println("Text read :: " + stringBuffer.toString());
} else {
System.out.println("Cursor is null");
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
반응형
'Basic > Android' 카테고리의 다른 글
[Android] 언제 어떤 Animator를 사용할 것인가? (4) | 2020.07.23 |
---|---|
[Android] Intent를 이용하여 Uri 얻어내기 (0) | 2020.05.29 |
[Android] Q Scoped Storage에서 MediaStore 이용하기 (4) | 2020.04.19 |
[Android] build gradle Product flavor 설정 방법 (0) | 2020.04.15 |
[Android] 화면 회전 고정 시키기 (0) | 2020.03.23 |