Android 파일 읽 기와 쓰기 작업 방법 요약
11019 단어 Android파일 읽 기와 쓰기
안 드 로 이 드 의 파일 은 서로 다른 위치 에 놓 여 있 고 읽 는 방식 도 다르다.
본 고 는 안 드 로 이 드 에서 자원 파일 의 읽 기,데이터 영역 파일 의 읽 기,SD 카드 파일 의 읽 기 및 RandomAccessFile 의 방식 과 방법 을 정리 했다.참고 로 제공 하 다.
1.자원 파일 읽 기:
1)resource 의 raw 에서 파일 데 이 터 를 읽 습 니 다.
String res = "";
try{
// Raw
InputStream in = getResources().openRawResource(R.raw.test);
//
int length = in.available();
byte [] buffer = new byte[length];
//
in.read(buffer);
// test.txt ,
res = EncodingUtils.getString(buffer, "BIG5");
//
in.close();
}catch(Exception e){
e.printStackTrace();
}
2)resource 의 asset 에서 파일 데 이 터 를 읽 습 니 다.
String fileName = "test.txt"; //
String res="";
try{
// asset
InputStream in = getResources().getAssets().open(fileName);
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
in.close();
res = EncodingUtils.getString(buffer, "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
2.읽 기/data/data/<응용 프로그램 이름>디 렉 터 리 에 있 는 파일:
//
public void writeFile(String fileName,String writestr) throws IOException{
try{
FileOutputStream fout =openFileOutput(fileName, MODE_PRIVATE);
byte [] bytes = writestr.getBytes();
fout.write(bytes);
fout.close();
}
catch(Exception e){
e.printStackTrace();
}
}
//
public String readFile(String fileName) throws IOException{
String res="";
try{
FileInputStream fin = openFileInput(fileName);
int length = fin.available();
byte [] buffer = new byte[length];
fin.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
fin.close();
}
catch(Exception e){
e.printStackTrace();
}
return res;
}
3.SD 카드 에 있 는 파일 을 읽 고 씁 니 다.즉/mnt/sdcard/디 렉 터 리 아래 파일:
// SD
public void writeFileSdcardFile(String fileName,String write_str) throws IOException{
try{
FileOutputStream fout = new FileOutputStream(fileName);
byte [] bytes = write_str.getBytes();
fout.write(bytes);
fout.close();
}
catch(Exception e){
e.printStackTrace();
}
}
// SD
public String readFileSdcardFile(String fileName) throws IOException{
String res="";
try{
FileInputStream fin = new FileInputStream(fileName);
int length = fin.available();
byte [] buffer = new byte[length];
fin.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
fin.close();
}
catch(Exception e){
e.printStackTrace();
}
return res;
}
4.File 클래스 를 사용 하여 파일 읽 기와 쓰기:
//
public String readSDFile(String fileName) throws IOException {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
int length = fis.available();
byte [] buffer = new byte[length];
fis.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
fis.close();
return res;
}
//
public void writeSDFile(String fileName, String write_str) throws IOException{
File file = new File(fileName);
FileOutputStream fos = new FileOutputStream(file);
byte [] bytes = write_str.getBytes();
fos.write(bytes);
fos.close();
}
5.그리고 File 류 는 다음 과 같은 자주 사용 하 는 동작 도 있 습 니 다.
String Name = File.getName(); // :
String parentPath = File.getParent(); //
String path = File.getAbsoultePath();//
String path = File.getPath();//
File.createNewFile();//
File.mkDir(); //
File.isDirectory(); //
File[] files = File.listFiles(); //
File.renameTo(dest); //
File.delete(); //
6.RandomAccessFile 을 사용 하여 파일 의 읽 기와 쓰기:RandomAccessFile 의 사용 방법 이 비교적 유연 하고 기능 도 비교적 많아 서 seek 와 유사 한 방식 으로 파일 의 임 의 위치 로 이동 할 수 있 습 니 다.파일 표시 기 에서
현재 위치 에서 읽 기와 쓰기 시작 합 니 다.
그것 은 두 가지 구조 방법 이 있다.
new RandomAccessFile(f,"rw");//
new RandomAccessFile(f,"r");//
사용 사례:
/*
* : RandomAccessFile , 。
*/
import java.io.*;
public class RandomAccessFileDemo {
public static void main(String[] args) throws Exception {
RandomAccessFile file = new RandomAccessFile("file", "rw");
// file
file.writeInt(20);// 4
file.writeDouble(8.236598);// 8
file.writeUTF(" UTF ");// , readShort()
file.writeBoolean(true);// 1
file.writeShort(395);// 2
file.writeLong(2325451l);// 8
file.writeUTF(" UTF ");
file.writeFloat(35.5f);// 4
file.writeChar('a');// 2
file.seek(0);//
// file ,
System.out.println("―――――― file ――――――");
System.out.println(file.readInt());
System.out.println(file.readDouble());
System.out.println(file.readUTF());
file.skipBytes(3);// 3 , boolean short 。
System.out.println(file.readLong());
file.skipBytes(file.readShort()); // “ UTF ” , readShort() , 2。
System.out.println(file.readFloat());
//
System.out.println("―――――― ( file fileCopy)――――――");
file.seek(0);
RandomAccessFile fileCopy=new RandomAccessFile("fileCopy","rw");
int len=(int)file.length();// ( )
byte[] b=new byte[len];
file.readFully(b);
fileCopy.write(b);
System.out.println(" !");
}
}
7.자원 파일 을 읽 을 때 seek 와 같은 방식 으로 파일 의 임 의 위치 로 이동 하여 지정 한 위치 에서 지정 한 바이트 수 를 읽 을 수 있 습 니까?답 은 돼.
FileInputStream 과 InputStream 에는 다음 함수 가 있 습 니 다.
public long skip (long byteCount); // n
public int read (byte[] buffer, int offset, int length); // length buffer offset 。offset buffer , 。
seek , :
[java] view plain copy
// read_raw txt , raw 。
//read_raw.txt :"ABCDEFGHIJKLMNOPQRST"
public String getRawString() throws IOException {
String str = null;
InputStream in = getResources().openRawResource(R.raw.read_raw);
int length = in.available();
byte[] buffer = new byte[length];
in.skip(2); //
in.read(buffer,0,3); //
in.skip(3); //
in.read(buffer,0,3); //
// str="IJK"
str = EncodingUtils.getString(buffer, "BIG5");
in.close();
return str;
}
위의 실례 를 통 해 알 수 있 듯 이 skip 함 수 는 C 언어의 seek 동작 과 약간 유사 하지만,그것들 사이 에는 약간 다르다.주의해 야 할 것 은:
1.skip 함 수 는 항상 현재 위치 에서 시작 합 니 다.실제 응용 에서 이 함수 의 반환 값 을 다시 판단 해 야 한다.
2.read 함수 도 항상 현재 위치 에서 읽 기 시작 합 니 다.
3.또한 reset 함 수 를 사용 하여 파일 의 현재 위 치 를 0 으로 초기 화 할 수 있 습 니 다.즉,파일 의 시작 위치 입 니 다.
어떻게 파일 의 현재 위 치 를 얻 습 니까?
나 는 관련 함수 와 방법 을 찾 지 못 했다.어떻게 해야만 파일 의 현재 위 치 를 얻 을 수 있 는 지 모르겠다.그것 도 그리 중요 하지 않 은 것 같다.
8.어떻게 FileInputStream 에서 InputStream 을 얻 습 니까?
public String readFileData(String fileName) throws IOException{
String res="";
try{
FileInputStream fin = new FileInputStream(fileName);
InputStream in = new BufferedInputStream(fin);
...
}
catch(Exception e){
e.printStackTrace();
}
}
9.APK 자원 파일 의 크기 가 1M 를 초과 할 수 없 는데 초과 하면 어떻게 합 니까?우 리 는 이 데 이 터 를 다시 data 디 렉 터 리 에 복사 한 후에 다시 사용 할 수 있다.데 이 터 를 복사 하 는 코드 는 다음 과 같 습 니 다.
public boolean assetsCopyData(String strAssetsFilePath, String strDesFilePath){
boolean bIsSuc = true;
InputStream inputStream = null;
OutputStream outputStream = null;
File file = new File(strDesFilePath);
if (!file.exists()){
try {
file.createNewFile();
Runtime.getRuntime().exec("chmod 766 " + file);
} catch (IOException e) {
bIsSuc = false;
}
}else{//
return true;
}
try {
inputStream = getAssets().open(strAssetsFilePath);
outputStream = new FileOutputStream(file);
int nLen = 0 ;
byte[] buff = new byte[1024*1];
while((nLen = inputStream.read(buff)) > 0){
outputStream.write(buff, 0, nLen);
}
//
} catch (IOException e) {
bIsSuc = false;
}finally{
try {
if (outputStream != null){
outputStream.close();
}
if (inputStream != null){
inputStream.close();
}
} catch (IOException e) {
bIsSuc = false;
}
}
return bIsSuc;
}
요약:1.apk 에는 두 가지 자원 파일 이 있 는데 두 가지 다른 방식 으로 열 어서 사용 합 니 다.
raw=getResources().openRawResource(R.raw.test);
asset=getResources().getAssets().open(fileName)을 사용 합 니 다.
이 데 이 터 는 읽 을 수 있 을 뿐 쓸 수 없습니다.더 중요 한 것 은 이 디 렉 터 리 의 파일 크기 가 1M 를 초과 해 서 는 안 된다 는 것 이다.
또한 주의해 야 할 것 은 InputStream 을 사용 할 때 함수 이름 뒤에 throws IOException 을 추가 해 야 한 다 는 것 이다.
2.SD 카드 의 파일 은 FileInputStream 과 FileOutputStream 을 사용 하여 파일 작업 을 합 니 다.
3.데이터 영역(/data/data/..)에 저 장 된 파일 은 openFileOutput 과 openFileInput 만 사용 할 수 있 습 니 다.
FileInputStream 과 FileOutputStream 을 사용 하여 파일 작업 을 할 수 없 음 을 주의 하 십시오.
4.RandomAccessFile 류 는 파일 의 작업 에 만 국한 되 고 다른 IO 장치 에 접근 할 수 없습니다.파일 의 임의의 위치 로 이동 하여 현재 위치 부터 읽 고 쓸 수 있 습 니 다.
5.InputStream 과 FileInputStream 은 모두 skip 과 read(buffre,offset,length)함 수 를 사용 하여 파일 의 무 작위 읽 기 를 실현 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.