Поскольку я не смог воспроизвести ошибку на своем компьютере или получить доступ к компьютеру пользователя, на котором произошел сбой кода, я ждал до сих пор, чтобы объявить принятый ответ.
Я изменил код на следующее:
File parentFolder = new File(targetPath);
... do some checks on parentFolder here ...
File targetFile = new File(parentFolder, filename);
targetFile.createNewFile();
fileInputStream = new FileInputStream(fileToCopy);
fileOutputStream = new FileOutputStream(targetFile);
byte[] buffer = new byte[64*1024];
int i = 0;
while((i = fileInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, i);
}
После этого он работал для пользователя, сообщающего о проблеме.
Так что, похоже, ответ Александера сделал свое дело - хотя на самом деле я использую конструктор немного другой, чем он, но в том же духе.
Мне еще нужно уговорить этого пользователя помочь мне проверить, что изменение кода исправило ошибку (вместо того, чтобы он делал что-то по-другому), снова запустив старую версию и проверив, не сработала ли она.
кстати. регистрация была на месте, и зарегистрированный путь казался хорошо - извините за то, что не упомянул это. Я принял это как должное и обнаружил, что это излишне усложняет код в вопросе.
Спасибо за полезные ответы.