В една програма на Java, работеща под Linux, срещнах проблеми с реализираното по този начин преместване на файл от една директория в друга.
В следващата конструкция, с оператор if, методът renameTo упорито връщаше резултат false и файлът просто не се появяваше в целевата директория:
if(srcFile.renameTo(dstFile))
Когато замених предишния ред със следващата конструкция, всичко тръгна нормално и файлът се преместваше успешно от едната директория в другата:
if(patchMoveFile(srcFile.getAbsolutePath(),
dstFile.getAbsolutePath()))
dstFile.getAbsolutePath()))
Тук новонаписаният допълнителен метод patchMoveFile премества файл по най-прост начин, като чете файла, записва го в друг файл и след това изтрива първия файл:
private boolean patchMoveFile(String srcFileName,
String dstFileName)
{
InputStream inStream = null;
OutputStream outStream = null;
boolean r = false;
try
{
File inFile = new File(srcFileName);
File outFile = new File(dstFileName);
inStream = new FileInputStream(inFile);
outStream = new FileOutputStream(outFile);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0)
{
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
inFile.delete();
r = true;
}
catch(IOException e)
{
e.printStackTrace();
}
return r;
} // patchMoveFile
String dstFileName)
{
InputStream inStream = null;
OutputStream outStream = null;
boolean r = false;
try
{
File inFile = new File(srcFileName);
File outFile = new File(dstFileName);
inStream = new FileInputStream(inFile);
outStream = new FileOutputStream(outFile);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0)
{
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
inFile.delete();
r = true;
}
catch(IOException e)
{
e.printStackTrace();
}
return r;
} // patchMoveFile
Значи, конструкцията с метода renameTo не искаше да работи, а с метода patchMoveFile заработи правилно в съвсем същия контекст на програмата/системата.
Това ми напомня, че за постигането на надеждност на програмите трябва да се използват конструкции, които работят без проблеми в различни възможни контексти/условия/системи/ситуации.
Няма коментари:
Публикуване на коментар