The File class doesn't represent the physic file in the hard drive, it is just an abstract representation. Creating a new instance of File class doesn't mean you are creating a physical file.
By knowing this, you can rename your file using a new File without worrying about creating new physical files. Code adapted from Rename a file using Java:
public static void renameFile(File toBeRenamed, String new_name)
    throws IOException {
    //need to be in the same path
    File fileWithNewName = new File(toBeRenamed.getParent(), new_name);
    if (fileWithNewName.exists()) {
        throw new IOException("file exists");
    }
    // Rename file (or directory)
    boolean success = toBeRenamed.renameTo(fileWithNewName);
    if (!success) {
        // File was not successfully renamed
    }
}
EDIT: Based on your question update and on this comment:
I took a pic of the error. "Unhandled Exception Type IO Exception"
Looks one of these:
- You don't know how to handle checked exceptions. - To do this, you should wrap the method that throws the - Exception(or subclass) in a- try-catchstatement:
 - String new_name = getFilename(file);
try {
    renameFiles(files[i], new_name);
} catch (IOException e) {
    //handle the exception
    //using a basic approach
    e.printStacktrace();
}
 - More info: Java Tutorial. Lesson: Exceptions. 
- You don't want your method to throw a checked exception. In this case, it would be better to throw an unchecked exception instead, so you don't need to handle the exception manually. This can be done by throwing a new instance of - RuntimeExceptionor a subclass of this:
 - public static void renameFile(File toBeRenamed, String new_name) {
    File fileWithNewName = new File(new_name);
    if (fileWithNewName.exists()) {
        throw new RuntimeException("file exists.");
    }
    // Rename file (or directory)
    boolean success = toBeRenamed.renameTo(fileWithNewName);
    if (!success) {
        // File was not successfully renamed
    }
}
 - More info in the link posted in the above section. 
- You don't want to throw an exception at all. In this case, it would be better to at least return a value to know if the file was exactly renamed: - public static boolean renameFile(File toBeRenamed, String new_name) {
    //need to be in the same path
    File fileWithNewName = new File(toBeRenamed.getParent(), new_name);
    if (fileWithNewName.exists()) {
        return false;
    }
    // Rename file (or directory)
    return toBeRenamed.renameTo(fileWithNewName);
}
 - And update your code accordingly: - String new_name = getFilename(file);
boolean result = renameFiles(files[i], new_name);
if (!result) {
    //the file couldn't be renamed
    //notify user about this
    System.out.println("File " + files[i].getName() + " couldn't be updated.");
}
 
Which one to choose? Will depend entirely on your taste. If I were you, I would use the third option for a quick dirty or learning phase work, but for a real world application I would use second option but using my own custom exception that extends from RuntimeException.