Java 删除重复文件

Java 删除重复文件,java,android,eclipse,Java,Android,Eclipse,我的问题是,我的代码工作正常(几乎完全完美),但它创建了两个相同的文件,我假设它是FileOutputStream,尝试创建一个“新文件”并将其放入其参数中,然后使用“file.delete();”在使用“save.close();”关闭后删除,就像人们在多次搜索后建议的那样,但我仍然保留了两个文件,唯一的区别是创建的文件是空的,带有0kb 一半的代码是从教程中复制的,另一半是我自己编写的,但我仍然不完全理解它的功能,因为我不是程序员,java也不是我的主要编程语言。 我希望有人能帮助我,谢谢

我的问题是,我的代码工作正常(几乎完全完美),但它创建了两个相同的文件,我假设它是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创建,如果我再次运行该文件,则该文件将正常创建,但始终使用两个新创建的文件,具有相同的名称、扩展名和相同的目录。

是否具有相同的名称和类型?是,完全相同的文件。请检查
fIn.available()
返回的内容好吗?返回的值只是一个估计值,如果
0
,imo将生成0 KByte的文件。它总是返回98293,我使用两个版本的代码测试了它,一个有效的版本,并在FileOutputStream参数上使用“新文件(路径,文件名)”创建空文件。FileOutputStream保存;文件j;试试{j=new File(path,filename);save=new FileOutputStream(j);save.write(buffer);save.flush();save.close();j.delete();}我不明白你所说的同一个文件的两个
是什么意思。