2012-04-01 18 views
5

Aşağıdaki kod her zaman dosyayı oluşturmaz. Fark ettiğim kadarıyla, ilk kez bu kod çalıştırıldı, ancak istisna yapılmadı ve oluşturulduFileSucceeded == true, dosya oluşturulamıyor.Java file.createNewFile dosyası oluşturulmadı ve istisnalar atılmadı

Bir dosya oluşturulduğu

File file = new File(tmpDir, fileName); 

try { 
if (tmpDir == null) { 
    String environmentHomePath // = somePath; 
    tmpDir = new File(environmentHomePath, "SampleDumps"); 

    if (! tmpDir.exists() || ! tmpDir.isDirectory()) { 
    boolean mkdirSucceeded = tmpDir.mkdir(); 
    if (! mkdirSucceeded) { 
     throw new IOException("Failed creating directory: '" + tmpDir.getAbsolutePath() + "'"); 
    } 
    } 
} 

if (file.exists()) { 
    boolean deleteFileSucceeded = file.delete(); 
    if (! deleteFileSucceeded) { 
    throw new IOException("Unable to delete pre existing sample file: '" + fileName + "'"); 
    } 
} 

boolean createFileSucceeded = file.createNewFile(); 
if (! createFileSucceeded) { 
    throw new IOException("Unable to create sample file: '" + fileName + "'"); 
} 

fw = new FileWriter(file); 
bw = new BufferedWriter(fw); 

StringBuilder sb = new StringBuilder("something..."); 

bw.write(sb.toString()); 
bw.flush(); 
} 
catch (IOException ioe) { 
log.warn("Unable to file invalid sample to file: '" + fileName + "'", ioe); 
} 
finally { 
if (bw != null) { 
    try { 
    bw.close(); 
    } catch (IOException e) { 
    log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
    } 
} 
else if (fw != null) { 
    try { 
    fw.close(); 
    } catch (IOException e) { 
    log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
    } 
} 
} 
+0

belki de uygulamayı yürüten kullanıcının bu dizinde –

+0

@LuiggiMendoza bir dosya oluşturmak için yeterli ayrıcalıklara sahip değil, ancak kod aynı anda, aynı işlem içinde, ikinci kez dosyayı oluşturuyor. –

+1

Kodunuzu çalıştırmayı denemedim, ancak bu dizinde varolmayı beklediği dosyayı oluşturduktan sonra tmpDir'i oluşturmanın, exists() gibi Dosya yöntemlerinden beklenmedik davranışlara neden olabileceğinden şüpheleniyorum. – GreyBeardedGeek

cevap

6

sonra true döner file.createNewFile() Eğer herhangi bir giriş yararlı olabilir Windows üzerinde kod, java 6.

çalıştırın.

Dosyanın oluşturulduğu, ancak beklediğiniz yerde değil, en olası açıklaması. Sana


Kodunuzdaki ve yorum daha dikkatli bakıldığında ... dosya için göreli bir yol adı kullanan bekliyoruz, bunu tam olarak neler olduğunu düşünüyorum. Geçici dizini oluşturma şekline bakın. Önce dosyayı, ana dizin olarak tmpdir kullanarak oluşturun. Ardından, tmpdir'un null olduğunu ve bir dizin oluşturduğunu test edersiniz. Ancak daha sonra STILL'in null üst dizinine sahip olduğu File nesnesini kullanmaya devam edersiniz!

tmpdir numaralı telefonu denetleyerek ve gerekiyorsa oluştururken File nesnesini oluşturmanız gerekir.

2

tmpDir ile ilgili yaklaşımınız hatalı. Dosya, adresinde adlı yerde oluşturuluyor. File(String, String) için Javadocs itibaren

:

ebeveyn ardından yeni dosya örneği sanki verilen çocuk yol adı dizesi tek argüman Dosya yapıcı çağırarak oluşturulan null ise.

2

bazı testin sonra hata bulundu ve düzeltmek ettik:

try { 
    //create tmpDir if its null 
    if (tmpDir == null) { 
     String environmentHomePath = "D:/"; //change to somepath 
     //tmpDir must be a directory path 
     tmpDir = new File(environmentHomePath); 

     if (!tmpDir.exists() || !tmpDir.isDirectory()) { 
      boolean mkdirSucceeded = tmpDir.mkdir(); 
      if (!mkdirSucceeded) { 
       throw new IOException("Failed creating directory: '" + tmpDir.getAbsolutePath() + "'"); 
      } 
     } 
    } 
    //create the path 
    File file = new File(tmpDir, fileName); 
    if (file.exists()) { 
     boolean deleteFileSucceeded = file.delete(); 
     if (!deleteFileSucceeded) { 
      throw new IOException("Unable to delete pre existing sample file: '" + fileName + "'"); 
     } 
    } 
    boolean createFileSucceeded = file.createNewFile(); 
    if (!createFileSucceeded) { 
     throw new IOException("Unable to create sample file: '" + fileName + "'"); 
    } 

    fw = new FileWriter(file); 
    bw = new BufferedWriter(fw); 

    StringBuilder sb = new StringBuilder("something..."); 
    bw.write(sb.toString()); 
    bw.flush(); 
} catch (IOException ioe) { 
    log.warn("Unable to file invalid sample to file: '" + fileName + "'", ioe); 
} finally { 
    try { 
    if (bw != null) { 
     try { 
      bw.close(); 
     } catch (IOException e) { 
      log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
     } 
    } 
    else if (fw != null) { 
     try { 
      fw.close(); 
     } catch (IOException e) { 
      log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
    } 
} 
+0

@BrianRoach Hiç bir cevap olmadığında testimi yaptım ve StephenC'yi bulamadım çünkü problemi ilk bulan kişi oydu. –

0

dosya adını kontrol edin. Hiçbir istisna atar herhangi bir kolon : veya benzeri herhangi bir karakter içermemelidir.