상세 컨텐츠

본문 제목

안드로이드 개발 리소스 경로 삭제 파일 삭제 관련

스마트기기개발관련/안드로이드 개발

by AlrepondTech 2020. 9. 22. 20:17

본문

반응형

 

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

출처: http://www.androes.com/141

일반적으로 외장카드 영역을 불러올때 /mnt/sdcard 이런 식으로 하드 코딩하시는 분들이 많은데
이런 경우 외장카드를 사용하지 않는 사용자인 경우 에러가 발생하게 됩니다.

사용자 폰에 외장카드 존재유무를 확인하여 처리하는 모듈을 간단히 구현해 봤으니 참고하세요!!

 String mSdPath;
        String ext = Environment.getExternalStorageState();
        if (ext.equals(Environment.MEDIA_MOUNTED)) {
            mSdPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/";
        } else {
            mSdPath = Environment.MEDIA_UNMOUNTED+"/";
        }
        File file = new File(mSdPath); 
        if (!file.exists()) mSdPath = "";        

        // 파일 생성
        BufferedWriter out = new BufferedWriter(new FileWriter(mSdPath+"androes.txt"));
        out.write("test text messages");
        out.newLine();
        out.close();

        // 파일 삭제
        File file = new File(mSDPath + "/" + "androes.txt");
        file.delete();

 

 

=================================

=================================

=================================

 

 

 

출처: http://www.androidpub.com/941974

어떤 특정 폴더에 있는 모든 파일들을 삭제 하려고 합니다. 

폴더명을 주면 내부에 모든 파일을 지워주는 함수가 있나요?

 

엮인글 주소 : http://www.androidpub.com/index.php?document_srl=941974&act=trackback&key=808

 

2010.11.01 17:49:27

챨리권

없습니다. 직접 구현해야 하는데 귀찮으시다면, 네박사에게 먹이감 던져주면 친절하게 다른분이 노가다한 결과물 대령할것입니다. 아마 "java 하위폴더 삭제" 이정도 먹이감이면 되지 않을까 합니다.

2010.11.01 19:38:17

정조

해보진 않았지만 유사한 샘플코드를 올려봅니다...

...이전 생략
   files = assetManager.list(mdir);   //지우고자 하는 파일목록을 설정

   for (int i = 0; i < files.length; i++){ //지우고자하는 파일갯수 많큼 루핑
         File outfile = new File("sdcard/onAir/" + mdir + "/" + files[i]); //지우고자하는 경로 및 파일 설정
        outfile.delete();
        ...... 이하생략

도움이 되셨으면 좋겠습니다.

2010.11.02 08:45:58

정가정가

아래 내용으로 구현하였습니다 

public void removeFiles()
    {
    	String mPath = "/sdcard/kiswire/";
    	File dir = new File(mPath);

    	String[] children = dir.list();
    	if (children != null) {
    	for (int i=0; i<children.length; i++) {
    	String filename = children[i];
    	File f = new File(mPath + filename);
    	
    	if (f.exists()) {
    	f.delete();
    	}
    	}//for
    	}//if
    	
    }//public void removeFiles()

 

 

=================================

=================================

=================================

 

 

 

출처: http://www.androidpub.com/264865

안녕하세요..

이제 막 안드로이드 개발을 시작한 왕초보 ㅠㅠ; 입니다.

답답한 마음에 이미지 관련해서 몇가지 질문 올립니다.

 

1) res/xxx 와 같이 폴더를 생성하여 이미지를 관리하고 싶은데..

잘 안되네요.. res 안에 임의의 폴더를 생성하는건 안되는건가요?

 

2) 일단 res/drawable 에 이미지를 넣어서 테스트를 해보았습니다.

 

mRes = context.getResources();

imgTest = BitmapFactory.decodeResource(mRes, R.drawable.noname_003);

이런식으로 이미지를 생성해서 그리는건 잘 되지만..

 

imgTest=BitmapFactory.decodeFile("파일경로/파일명");

이런식으로 이미지를 생성해서 그리려고 하면 NullPointerException이 발생합니다.

정확히 경로를 어디서부터 잡아야 하는지 모르겠네요..

 

imgTest=BitmapFactory.decodeFile("res/drawable/noname_007.png");

imgTest=BitmapFactory.decodeFile("drawable/noname_007.png");

등등 별 짓을 다 해도 안되네요..

 

고수분들의 답변 부탁드리겠습니다.

 

목록

엮인글 주소 : http://www.androidpub.com/index.php?document_srl=264865&act=trackback&key=5b9

 

2010.04.15 17:28:44

드로이

res/drawable/.......  이 경로는 apk파일 안에서의 경로지
그냥 저렇게 선언하면 핸드폰자체 메모리에서 경로를 찾아갑니다...

이해하기 쉽게 컴퓨터로 예를들면 이미지파일은 example.exe라는 프로그램안에
포함되어있는데 엉뚱한 C:/res/drawable/ 폴더에서 이미지를 찾는것이지요..

어플에서 사용할 이미지 넣는것이라면 res에 drawable폴더를 만들어서 넣고
BitmapFactory.decodeResource(getResources(), R.drawable.noname_007.png);
이런식으로 쓰면 됩니다.

2010.04.15 17:38:07

우엉이

드로이님.. 답변 감사드립니다.

사용하려는 이미지가 500여장이 넘어가고, 6개 폴더에 나뉘어서 관리되고 있습니다.

이미 개발된 게임을 컨버팅 하는거라 ...

BitmapFactory.decodeResource(getResources(), R.drawable.noname_007.png); 

이 방식으로는 도저히 답이 안나오네요 ㅠㅠ;;

다른 효과적인 방법이 없을까요?

2010.04.15 17:58:36

아즈라엘

일일이 하기가 여간 잔망스러운게 ㅋㅋ

http://www.androidpub.com/42875

2010.04.15 18:12:18

드로이

옛날에 봤던거네요ㅎㅎ

그나저나 500개가 넘어가고있다면...
시작할때 한꺼번에 로딩하려면 무쟈게 오래 걸리겠네요...
필요할때마다 가져와야되려나... 용량도 대박이겠군요...

2010.04.15 18:29:47

우엉이

아즈라엘, 드로이님 정말 감사합니다. 일단 폴더로 관리하는건 해결됐네요.. 정말 감사..

산 넘어 산이군요...

로딩시간은.. 별문제 없습니다.. 필요한거만 그때그때 불러 쓰기때문에...

아무튼 다시 한번 감사드립니다.

 

2011.01.07 17:07:01

천재자룡

우엉이 님....폴더로 관리하는거 좀 가르쳐주시면 감사하겠습니다~~

 

 

 

=================================

=================================

=================================

 

 

 

 

출처: http://www.androidpub.com/1123905

제가 어플을 만드는도중

액티비티를 파일이 만약에 있으면 1번 액티비티로가고

만약에 파일이 없으면 2번 액티비티로 가는걸 하고있습니다 ㅠㅠ

경로는 /raw/폴더를 따로 생성하였구요 여기서 

파일유무를 검사해서 있으면 1번 없으면 2번일케 할려고하는데

String Path = "/raw/test.txt";
            File file = new File(Path);
            if (file.exists() == true) {
             Toast.makeText(this, "파일있어", 2000).show();
             Intent intent5 = new Intent(this, FlowerGallery.class);
       startActivity(intent5);
         }else if(file.exists() == false){  
          Toast.makeText(this, "파일없어", 2000).show();
          Intent intent2 = new Intent(this, FlowerView.class);
          startActivity(intent2);
         }

자꾸 오류가 납니다 ㅠㅠ 
오류가 난다기보다 파일이 있는데 없다고 뜨고 view.class로 넘어갑니다 ㅠㅠ

좀 봐주시겠어요?ㅠㅠ

sdcard경로는 제가 알고있어서 sdcard에는 잘되드라구여 ㅠㅠ

근데 그냥 sdcard쓰지않고 폴더하나생성하고 저장을 시켜놨는데 안됍니다 봐주십셔 ㅠㅠ

이 게시물을...



목록

엮인글 주소 : http://www.androidpub.com/index.php?document_srl=1123905&act=trackback&key=90e

 

2010.12.17 11:44:57

개굴딱지

File 클래스로 직접 어세싱하시면 않되고.. 아마 getResources()를 이용하셔야 할텐데요..

2010.12.17 12:19:44

바야바

일반 파일은 raw 폴더가 아니라 assets라는 폴더를 만들어서 거기에 넣어주시면 로딩 잘됩니다. 저도 게임 만드는데 데이터 파일을 그렇게 해서 쓰고 있어요.

 

 

=================================

=================================

=================================

 

 

 

출처: http://www.androidside.com/bbs/board.php?bo_table=b49&wr_id=64359

String sd = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/abc/";

 File mypath = new File(sd);
     if(!mypath.isDirectory()){
      mypath.mkdir();
     }

     Calendar calendar = Calendar.getInstance();
     SimpleDateFormat dateformat = new SimpleDateFormat("MM월 dd일 mm분 ss초");
     Date currentTime = new Date();
     String today = dateformat.format(currentTime);
     Path = mypath + "/"+today+".3gp";

sd카드에 abc폴더를 하나 만들고 거기다가 파일이 생성된 날짜와

시간까지 생성이 잘되었는데...

 

그 생성된 파일을 삭제 하려고 하니까 삭제가 안되더라고요.

삭제에 필요한 권한은 따로 없는걸로 알고 있는대 도대체 왜 안되는걸까요?

로그로 찍어봐도 삭제 되는 경로 아무이사없이 잘 찍히는대.. 파일이름에 한글이 들어간것떄문에

그런것은 아닌거 같고.. 경로도 이상없는대 삭제가 안되서 답답해용 ㅠㅠ

 private List<MyItem> list;   //  list라는 이름이 들어간 텍스트뷰이고요

 private MyItem mi;



 File f = new File(sd);
  final File[] files = f.listFiles();

  for (int i = 0; i < files.length; i++) {
   File file = files[i];
   mi = new MyItem(file.getName());
   list.add(mi);
  }

 

이렇게 리스트를 추가 시켜놧거든요

그래서 아래와같이 삭제 코드를 적어놨더니

   File file = new File(sd+list.get(position).list);
    Log.i("testLog",sd+list.get(position).list);    
    file.delete();

 

로그도 이상없이 잘찍히는대 도무지 삭제가 안되네요.. 뭐가 문제일까요 ㅠㅠ;;

    File file = new File(sd+list.get(position).list);
    file.delete();

 

 

=================================

=================================

=================================

 

 

 

반응형

 

728x90

 

 

 

 

출처: http://www.androidpub.com/2136864

이미지를 저장하고 불러오기위해 저장후에 불러오기까진 했는데 이 이미지파일을 삭제하기위해선 소스상에서

어떻게 접근해애하나요?

String sd = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/abc/";

 File mypath = new File(sd);
     if(!mypath.isDirectory()){
      mypath.mkdir();
     }

     Calendar calendar = Calendar.getInstance();
     SimpleDateFormat dateformat = new SimpleDateFormat("MM월 dd일 mm분 ss초");
     Date currentTime = new Date();
     String today = dateformat.format(currentTime);
     Path = mypath + "/"+today+".3gp";

File 객체에 삭제pi 함수가 있어요

2012.05.06 21:20:22

헤록스

삭제pi가 먼지 찾아도 모르겠네요; 이클립스상에서 파일 접근하려고 file explorer로 data/data 폴더로 들어가면 된다는데

data폴더 클릭해도 아무하위 폴더도 뜨지않는건 없어서그런건가요??;

2012.05.06 22:53:51

EunJung

아래처럼 해보세요. ^^

String path = "/data/data/어플패키지명/";

protected void deletePackageFolder(String path) {

    File file = new File(parentPath);

    if(file.exists()){

    String[] fnameList = file.list();

    if(fnameList != null && fnameList.length > 0){

    int fCnt = fnameList.length;

    String childPath = "";

   

    for(int i = 0; i < fCnt; i++) {

      childPath = parentPath+"/"+fnameList[i];

      File f = new File(childPath);

      if( ! f.isDirectory()) {

        f.delete();  

      }

      else {

      deletePackageFolder(childPath);

      }

    }

    }

    File f = new File(parentPath);

    f.delete();   

    }

  }

2012.05.06 23:07:19

헤록스

감사합니다!. 근데 위에소스는 파일 전체 삭제인가요? 제가 파일명은 알겠는데 이 알고있는 파일명으로 파일하나만 삭제할순없나요??

아 그리고 path의 어플패키지명은 프로젝트명인가요 아님 패키지가 여러개있는데 어떤패키지인가요?

 

 

=================================

=================================

=================================

 

 

출처: http://ismydream.tistory.com/124

안드로이드 File 다루기

File 다루기

- 안드로이드는에는 내부, 외부의 두가지의 파일 저장 영역이 있다. (internal, external storage)

 

internal storage (내부)

- 항상 사용가능하며 내부에 저장된 파일은 기본적으로 해당 앱만 접근 가능하다.

- 시스템은 앱이 제거될때 내부에 저장된 파일을 모두 제거한다.

 

external storage (외부)

- 이곳에 저장된 파일은 다른 곳에서 읽혀질 수 있다. 따라서 다른 앱과 공유될 수 있거나 컴퓨터로 따로 관리할 파일들을 저장하는데 사용하는 것이 좋다.

 

참고

앱은 기본적으로 internal storage 에 저장되지만 manifest 파일내의 android:installLocation 속성으로 external storage 에 저장할 수 있다.

예) apk 파일의 사이즈가 매우 큰경우

 

external storage 권한 얻기

쓰기 권한

<manifest ...>

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

</manifest>

 

 

읽기 권한

차후에는 external storage 에 대한 읽기 권한은 기본으로 제공될 예정

<manifest ...>

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

</manifest>

 

internal storage 에 파일 저장하기

getFileDir()

- 앱 관련된 파일을 저장할 내부 디렉토리의 File 객체를 리턴한다.

getCacheDir()

- 앱의 임시 캐쉬 파일을 저장할 수 있는 디렉토리의 File 객체를 리턴한다.

 

파일 저장하기

File file = new File(context.getFilesDir(), filename);



String filename = "myfile";

String string = "Hello world";

FileOutputStream outputStream;



try{

outputStream = openFileOutput( filename, Context.MODE_PRIVATE);

outputStream.write( string.getBytes());

outputStream.close();

}catch( Exception e){

e.printStackTrace();

}

 

임시파일 생성

public File getTempFile( Context context, String url){

File file;

try{

String fileName = Uri.parse(url).getLastPathSegment();

file = File.createTempFile( fileName, null, context.getCacheDir());

}catch( IOException e){



}

return file;

}

 

 

external stroage 에 파일 저장하기

외부 저장소가 연결되어 있으며 사용가능한지 여부 체크

public boolean isExternalStorageWritable(){

String state = Environment,getExternalStorageState();

if( Environment.MEDIA_MOUNTED.equals( state)){

return true;

}

return false;

}



public boolean isExternalStorageReadable(){

String state = Environment.getExternalStorageState();

if( Environment.MEDIA_MOUNTED.equals( state) ||

Environment.MEDIA_MOUNTED_READ_ONLY.equals( state)){

return true;

}

return false;

}

 

external storage 공용 public 저장소 사용하기

public 저장소는 앱을 삭제해도 저장되어 있는 파일이 사용가능하다.

public File getAlbumStorageDir( String albumName){

File file = new File( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), 

albumName

);

if( !file.mkdir()){

Log.e( LOG_TAG, "Directory not created");

}



return file;

}

 

external storage 개인 private 저장소 사용하기

앱이 제거되면 private 저장소내의 모든 파일을 삭제한다.

public File getAlbumStorageDir( String albumName){

File file = new File( Environment.getExternalFilesDir( Environment.DIRECTORY_PICTURES), 

albumName

);

// root 디렉토리 얻기

// file = new File( Environment.getExternalFilesDir( null)); 



if( !file.mkdir()){

Log.e( LOG_TAG, "Directory not created");

}



return file;

}

 

저장공간 확인

getFreeSpace(), getTotalSpace() 로 확인할 수 있다.

 

파일 삭제하기

myFile.delete();

myContext.deleteFile( fileName);

 

 

=================================

=================================

=================================

 

 

출처: http://stackoverflow.com/questions/22645511/set-ringtone-from-res-raw-folder

I am trying to set an audio file in the /res/raw/ folder as the default ringtone programmatically. I have the following file like so: myapp/res/raw/file.mp3.

I have the following code, but it unfortunately completely fails to set the ringtone. I'm not sure what is causing the issue, but was wondering if anyone had any insight to share.

Uri path = Uri.parse("android.resource://com.mikan.myapp/res/raw/file.mp3");
        RingtoneManager.setActualDefaultRingtoneUri(
                getApplicationContext(), RingtoneManager.TYPE_RINGTONE,
                path);
        Log.i("TESTT", "Ringtone Set to Resource: "+ path.toString());
        RingtoneManager.getRingtone(getApplicationContext(), path)
                .play();

I'm getting the following exception (which is caught within RingtoneManager, making it look like nothing is happening at all:

I am trying to set an audio file in the /res/raw/ folder as the default ringtone programmatically. I have the following file like so: myapp/res/raw/file.mp3.

I have the following code, but it unfortunately completely fails to set the ringtone. I'm not sure what is causing the issue, but was wondering if anyone had any insight to share.

Uri path = Uri.parse("android.resource://com.mikan.myapp/res/raw/file.mp3");
        RingtoneManager.setActualDefaultRingtoneUri(
                getApplicationContext(), RingtoneManager.TYPE_RINGTONE,
                path);
        Log.i("TESTT", "Ringtone Set to Resource: "+ path.toString());
        RingtoneManager.getRingtone(getApplicationContext(), path)
                .play();
I'm getting the following exception (which is caught within RingtoneManager, making it look like nothing is happening at all:

03-25 20:20:23.024: D/MediaPlayer(24659): setDataSource IOException happend : 
03-25 20:20:23.024: D/MediaPlayer(24659): java.io.FileNotFoundException: More than two path segments: android.resource://com.mikan.myapp/res/raw/file.mp3
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.content.ContentResolver.getResourceId(ContentResolver.java:861)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:653)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:979)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.media.MediaPlayer.setDataSource(MediaPlayer.java:933)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.media.Ringtone.setUri(Ringtone.java:228)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.media.RingtoneManager.getRingtone(RingtoneManager.java:647)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.media.RingtoneManager.getRingtone(RingtoneManager.java:628)
03-25 20:20:23.024: D/MediaPlayer(24659):   at com.mikan.myapp.CustomApp.saveas(CustomApp.java:139)
03-25 20:20:23.024: D/MediaPlayer(24659):   at com.mikan.myapp.ListAdapter$1.onClick(ListAdapter.java:83)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.view.View.performClick(View.java:4475)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.view.View$PerformClick.run(View.java:18786)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.os.Handler.handleCallback(Handler.java:730)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.os.Handler.dispatchMessage(Handler.java:92)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.os.Looper.loop(Looper.java:137)
03-25 20:20:23.024: D/MediaPlayer(24659):   at android.app.ActivityThread.main(ActivityThread.java:5419)
03-25 20:20:23.024: D/MediaPlayer(24659):   at java.lang.reflect.Method.invokeNative(Native Method)
03-25 20:20:23.024: D/MediaPlayer(24659):   at java.lang.reflect.Method.invoke(Method.java:525)
03-25 20:20:23.024: D/MediaPlayer(24659):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-25 20:20:23.024: D/MediaPlayer(24659):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-25 20:20:23.024: D/MediaPlayer(24659):   at dalvik.system.NativeStart.main(Native Method)
03-25 20:20:23.024: D/MediaPlayer(24659): Couldn't open file on client side, trying server side

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

You cannot set the ringtone from resource.

RingtoneManager.setActualDefaultRingtoneUri expects the ringtone file in the device and the Uri should be from content resolver.

File ring = new File("pathOfYourFile");
 Uri path = MediaStore.Audio.Media.getContentUriForPath(ring.getAbsolutePath());
 RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE,path);

Also make sure to add permission

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

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

please try the solution in this question here

File file = new File(Environment.getExternalStorageDirectory(),
                "/myRingtonFolder/Audio/");
        if (!file.exists()) {
            file.mkdirs();
        }

        String path = Environment.getExternalStorageDirectory()
                .getAbsolutePath() + "/myRingtonFolder/Audio/";

        File f = new File(path + "/", name + ".mp3");

        Uri mUri = Uri.parse("android.resource://"
                + context.getPackageName() + "/raw/" + name);
        ContentResolver mCr = context.getContentResolver();
        AssetFileDescriptor soundFile;
        try {
            soundFile = mCr.openAssetFileDescriptor(mUri, "r");
        } catch (FileNotFoundException e) {
            soundFile = null;
        }

        try {
            byte[] readData = new byte[1024];
            FileInputStream fis = soundFile.createInputStream();
            FileOutputStream fos = new FileOutputStream(f);
            int i = fis.read(readData);

            while (i != -1) {
                fos.write(readData, 0, i);
                i = fis.read(readData);
            }

            fos.close();
        } catch (IOException io) {
        }
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, name);
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.MediaColumns.SIZE, f.length());
        values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
        values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
        values.put(MediaStore.Audio.Media.IS_ALARM, true);
        values.put(MediaStore.Audio.Media.IS_MUSIC, true);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(f
                .getAbsolutePath());
        Uri newUri = mCr.insert(uri, values);

        try {
            RingtoneManager.setActualDefaultRingtoneUri(context,
                    RingtoneManager.TYPE_RINGTONE, newUri);
            Settings.System.putString(mCr, Settings.System.RINGTONE,
                    newUri.toString());
        } catch (Throwable t) {

        }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only ans

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역