Вам нужно получить абсолютный путь и использовать его для ссылки на нужный файл. Java предоставляет FileSystem для помощи. Добавьте путь к файлу после получения абсолютного пути.
import java.io.ObjectInputStream;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.nio.file.FileSystems;
class FileRead {
public static void main(String[] args) {
try {
String filePath =
FileSystems.getDefault().getPath(".").
toAbsolutePath()+"/Practice/Stack";
File file = new File(filePath,"test.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String st;
while ((st = br.readLine()) != null) {
System.out.println(st);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}finally{}
}
}
Я предложил бы идти с C или C++ для этого, он имеет намного более прямой доступ к аппаратным средствам.
Если Вы хотите производительность абсолютного максимума, переходят к уровню драйвера и просто берут данные непосредственно видеокарта. Трудно найти драйвер как это, потому что это могло использоваться для легкого нанесения поражения любой защите от копирования, так как это захватывает данные, когда это идет в экран.
Но если необходимо придерживаться Java и Робота, действительно ли Вы уверены, что это - просто этот вызов функции, который занимает много времени? Это не выделяет BufferedImage или что-то еще?
Попробуйте экспериментировать с различными настройками экрана. Глубина цвета повлияет на него, так как AWT должен преобразовать все в обычный растровый формат.
Некоторые примеры времени с моего ПК:
Resolution | Depth | Time taken
------------+-------+------------
1280x1024 | 32 | 215ms
1280x1024 | 16 | 155ms
1600x900 | 32 | 235ms
Мой адаптер не может сделать 24BPP или 64BPP, поэтому я не мог проверить этими глубинами, но я догадаю, что им потребует больше циклов ЦП для преобразования.