删除重复文件

时间:2014-10-02 05:34:16

标签: java android eclipse

我的问题是,我有这个代码工作(几乎完全完美),但它创建了两个相同的文件,我假设它是FileOutputStream,试图创建一个“新文件”并将其放入其参数并删除使用“file.delete();”用“save.close();”关闭之后,就像人们推荐这么多搜索一样,但我仍然保留两个文件,唯一的区别是创建的文件是空的,有0kb。

我从教程中复制的代码的一半,另一半是我自己编写的,但我仍然不完全理解它的作用,因为我不是程序员,而java不是我的主要编程语言。 我希望有人可以帮助我,谢谢。

public static boolean SetRingtone(Context context, int type, int music) {
        byte[] buffer = null; int size = 0;
        InputStream fIn = context.getResources().openRawResource(music);

        try {
            size = fIn.available();
            buffer = new byte[size];
            fIn.read(buffer); fIn.close();
        } catch (IOException e) {return false;}

        String folderType = "";
        if (type == RingtoneManager.TYPE_RINGTONE) folderType = "ringtones" + File.separator;
        else if (type == RingtoneManager.TYPE_NOTIFICATION) folderType = "notifications" + File.separator;
        else if (type == RingtoneManager.TYPE_ALARM) folderType = "alarms" + File.separator;

        String path = Environment.getExternalStorageDirectory() + File.separator + "media/audio" + File.separator + folderType;
        String filename = context.getResources().getResourceEntryName(music) + ".mp3";
        filename = filename.replace("_", " - ");
        String[] artist = filename.split(" - ");

        boolean exists = (new File(path)).exists();
        if (!exists) {new File(path).mkdirs();}

        try {
            FileOutputStream save;
            save = new FileOutputStream(path + filename);
            save.write(buffer); save.flush(); save.close();
        }
        catch (FileNotFoundException e) {return false;}
        catch (IOException e) {return false;}


        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path + filename)));

        File f = new File(path, filename);
        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath());
        values.put(MediaStore.Audio.Media.ARTIST, artist[0]);
        values.put(MediaStore.Audio.Media.ALBUM, context.getString(R.string.app_name));
        values.put(MediaStore.MediaColumns.TITLE, filename);
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg");

        if (type == RingtoneManager.TYPE_RINGTONE) {values.put(MediaStore.Audio.Media.IS_RINGTONE, true);}
        else if (type == RingtoneManager.TYPE_NOTIFICATION) {values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);}
        else if (type == RingtoneManager.TYPE_ALARM) {values.put(MediaStore.Audio.Media.IS_ALARM, true);}

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath());
        Uri newUri = context.getContentResolver().insert(uri, values);
        RingtoneManager.setActualDefaultRingtoneUri(context, type, newUri);
        context.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(f.getAbsolutePath()), values);
        return true;
    }

编辑:代码的第二个版本,它创建空文件。

FileOutputStream save;
try {
    File j = new File(path, filename);
    save = new FileOutputStream(j);
    save.write(buffer); save.flush(); save.close(); j.delete();
}

编辑2:好的,经过几次测试之后,我意识到该文件只在第一次运行时创建了0kb,如果我再次运行它,文件会正常创建,但总是带有两个新创建的文件,具有相同的名称,扩展名和在同一目录中。

0 个答案:

没有答案