Android에서 파일 생성 시도 : 열기 실패 : EROFS (읽기 전용 파일 시스템)
이 줄 :
final FileOutputStream outputStream = new FileOutputStream(name);
"2ozjfFQzwv"가 파일 이름으로 전달 된 FileNotFoundException
메시지와 함께 결과가 나타 /2ozjfFQzwv: open failed: EROFS (Read-only file system)
납니다.
나는 WRITE_INTERNAL_STORAGE
허락 없이 이것을 시도했다 . 이 파일을 작성하려면 어떻게 만드나요?
또는 새 활동에 이미지를 제공 할 수 있기를 원하며 추가로 직렬화하기에는 너무 큽니다. 파일에 기록한 다음 다시 읽는 것보다 쉬운 방법이 있습니까? 여기에있는 모든 질문은 SD 카드에 쓰기에 관한 것 같습니다. 많은 사람들이 SD 카드 슬롯을 가지고 있지 않기 때문에 저는하고 싶지 않습니다.
WRITE_INTERNAL_STORAGE 권한 유무에 관계없이 이것을 시도했습니다.
WRITE_INTERNAL_STORAGE
Android 에는 권한 이 없습니다 .
이 파일을 작성하려면 어떻게 만드나요?
앱이 수퍼 유저 권한으로 실행되는 경우 루팅 된 기기를 제외하고는 그렇지 않습니다. 앱이 액세스 할 수없는 내부 저장소의 루트에 쓰려고합니다.
객체 FileOutputStream
를 취하는 생성자 의 버전을 사용하십시오 File
. 다음 File
과 같이 쓸 수있는 위치를 기반으로 해당 개체를 만듭니다 .
getFilesDir()
(귀하Activity
또는 다른 사람 에게 전화 함Context
)getExternalFilesDir()
(귀하Activity
또는 다른 사람 에게 전화 함Context
)
후자는 WRITE_EXTERNAL_STORAGE
허가로 필요합니다 .
파일에 기록한 다음 다시 읽는 것보다 쉬운 방법이 있습니까?
정적 데이터 멤버에 임시로 넣을 수 있습니다.
많은 사람들이 SD 카드 슬롯이 없기 때문에
"SD 카드 슬롯"은 대체로 무관합니다. Android 기기 사용자의 99 %는 외부 저장소를 갖게됩니다. 단, 사용자가 SD 카드를 제거한 4 년 이상 된 기기는 예외입니다. 2010 년 중반 이후에 제조 된 장치에는 이동식 미디어가 아닌 온보드 플래시의 일부로 외부 저장소가 있습니다.
WRITE_EXTERNAL_STORAGE의 권한을 사용해보십시오. 외부 카드 유무에 관계없이 사용해야합니다.
이것은 나를 위해 잘 작동합니다.
path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_MOVIES);
File file = new File(path, "/" + fname);
내 파일을 적절한 폴더에 저장합니다.
첨가
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
매니페스트에서 Martin과 동일하게 사용 :
path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
File file = new File(path, "/" + fname);
효과가있었습니다.
다음은 Android 개발자의 간단한 샘플 입니다 .
기본적으로 다음과 같이 내부 저장소에 파일을 쓸 수 있습니다.
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
다른 사람들이 언급했듯이 Android의 앱은 내부 저장소가 아닌 자신의 개인 저장소 (/ data / data / PACKAGE_NAME 아래)에 파일을 쓸 수 없습니다.
API를 사용하여 앱에 허용되는 올바른 경로를 가져와야합니다.
이것을 읽으십시오 .
Google은 외부 sdcard에 대한 쓰기 액세스를 제한했습니다. API 19에는 쓰기 액세스를 허용하는 "계약"을 설정할 수있는 스토리지 액세스 프레임 워크라는 프레임 워크가 있습니다.
추가 정보 :
Android-새 저장소 액세스 프레임 워크를 사용하여 파일을 외부 SD 카드에 복사하는 방법
단위 / 계측 테스트에서 이것을 얻는 사람이 있다면 getFilesDir()
테스트 컨텍스트가 아닌 앱 컨텍스트에서 호출해야합니다 . 즉 사용 :
Context appContext = getInstrumentation().getTargetContext().getApplicationContext();
아니
Context appContext = InstrumentationRegistry.getContext;
애플리케이션에 내부 저장소를 사용하려면 권한이 필요하지 않지만 File directory = getApplication().getCacheDir();
앱에 허용 된 디렉터리를 가져 오려면 다음 을 사용해야 할 수 있습니다.
또는 :
getCashDir();
<-작동해야 함
context.getCashDir();
(브로드 캐스트 수신기에있는 경우)
getDataDir();
<-Api 24
ReferenceURL : https://stackoverflow.com/questions/15711098/trying-to-create-a-file-in-android-open-failed-erofs-read-only-file-system
'developer tip' 카테고리의 다른 글
파이썬에서 고정 크기 형식의 문자열을 어떻게 만듭니 까? (0) | 2021.01.11 |
---|---|
PowerShell로 문자열을 분할하고 각 토큰으로 작업 수행 (0) | 2021.01.11 |
bitbucket으로 푸시 할 수 없습니다. 권한이 거부되었습니다 (공개 키). (0) | 2021.01.11 |
JSON jsonObject.optString ()은 문자열 "null"을 반환합니다. (0) | 2021.01.11 |
홈 브루로 cmake 설치 (0) | 2021.01.11 |