В UNIX не все файлы имеют расширение, возможно, это то, что происходит с вами, но пока вы не предоставите трассировку стека или более точное определение не сработало Я не могу сказать.
Я взял ваш код и создал пример:
localhost:Desktop oscarryz$ cat Fe.java
import java.io.File;
import static java.lang.System.out;
class Fe {
public static void main( String ... args ) {
File f = new File("Screen Shot 2012-03-06 at 10.03.35 PM.png");
out.println("File exists: " + f.exists() );
out.println("Extension: " +
f.getName().substring( f.getName().lastIndexOf('.')+1)
);
}
}
localhost:Desktop oscarryz$ javac Fe.java
localhost:Desktop oscarryz$ java Fe
File exists: true
Extension: png
Вы, вероятно, отбрасываете расширение при передаче имени файла, потому что механизм, который вы показываете, работает на OSX отлично.