web-dev-qa-db-ja.com

AndroidアプリケーションでSDカード上のファイルの名前を変更する方法は?

Androidアプリケーションで、実行時にファイル名を変更したいのですが、どうすればいいですか?

これは私のコードです:

String[] command = {" mv", "Sun moon.jpg"," Sun_moon,jpg"};
try
{
    Process process = Runtime.getRuntime().exec(command);
} 
catch (IOException e)
{
    Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show();
}

RenameTo(File f)メソッドも使用しましたが、機能しません。

14
Addy

mvコマンドを実行するのではなく、 File.renameTo() を使用することをお勧めします。後者はサポートされていないためです。

アプリケーションにSDカードへの書き込み権限を付与しましたか

これを行うには、 以下を_AndroidManifest.xml_ に追加します。

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

権限が追加されても機能しない場合は、(adbコマンドを使用するか、logcatEclipseのビュー)。

SDカードにアクセスするときは、パスをハードコーディングするのではなく、代わりに Environment.getExternalStorageDirectory() メソッドを使用してディレクトリを取得します。

次のコードは私のために働きます:

_File sdcard = Environment.getExternalStorageDirectory();
File from = new File(sdcard,"from.txt");
File to = new File(sdcard,"to.txt");
from.renameTo(to);
_

プロセスを確認したい場合は、次のようにします。

_boolean renamed = from.renameTo(to);

if (renamed) {
  Log.d("LOG","File renamed...");
}else {
  Log.d("LOG","File not renamed...");
}
_
85
Dave Webb

ディレクトリを指定せずに完全なパスを明示的に指定することもできます...

File file = new File("Path of file which you want to rename");
File file2 = new File("new name for the file");
    boolean success = file.renameTo(file2);
5
Xar E Ahmer

権限を追加してみました。機能しませんでしたが、File1.setWritable(true);を追加すると、ファイルの名前を変更できます。

以下は私のコードスニペットです:

if(from.setWritable(true))
    Log.d("InsertFragmentTwo ", "FileName==> Is Writable");
File two = new File(sdcard,""+imageCount+"."+s.substring((s.lastIndexOf(".")+1)));
if (from.renameTo(two)) {
    Log.d("InsertFragmentTwo ", "New FileName==> " + temp);
    imageCount++;
    retrofitImageUpload(temp);
} else
    Log.d("InsertFragmentTwo ", "File Renaming Failed");
0
public void selectFile() {
    AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this);
    pictureDialog.setTitle("Select Action");
    String[] pictureDialogItems = {
            "Select file from internal storage"};
    pictureDialog.setItems(pictureDialogItems,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case 0:
                            choosePhotoFromGallary();
                            break;
                    }
                }
            });
    pictureDialog.show();
}
public void choosePhotoFromGallary() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(galleryIntent, GALLERY);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == GALLERY) {
        if (data != null) {
            Uri contentURI = data.getData();
            File dir = Environment.getExternalStorageDirectory();
            if(dir.exists()){
                File from = new File(dir, String.valueOf(GALLERY));
                File to = new File(dir,"filerename.txt");
                if(from.exists())
                    from.renameTo(to);
            }
        }
    }
}
0
Tayyab Hayat