2011-09-15 83 views
1

我試圖使用java無法在Windows 7中創建新文件?

file.createNewFile() 

建立在Windows 7新的文件,但不能創建的文件,我得到了以下異常

Message: 
The system cannot find the path specified 
Stack Trace: 
[java.io.IOException: The system cannot find the path specified, 
    at java.io.WinNTFileSystem.createFileExclusively(Native Method), 
    at java.io.File.createNewFile(File.java:883), 
    at com.mercury.mtf.actions.file.CreateEmptyFileTask.execute(CreateEmptyFileTask.java:56), 
    at com.mercury.mtf.actions.file.CreateEmptyFileAction.execute(CreateEmptyFileAction.java:42), 
    at com.mercury.mtf.core.AbstractAction.run(AbstractAction.java:50), 
    at com.mercury.mtf.core.Unit.runUnitAction(Unit.java:347), 
    at com.mercury.mtf.core.Unit.executeUnitAction(Unit.java:176), 
    at com.mercury.mtf.core.Unit.run(Unit.java:121), 
    at com.mercury.mtf.core.execution.DefaultUnitExecutor.call(DefaultUnitExecutor.java:24), 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303), 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138), 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98), 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207), 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886), 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908), 
    at java.lang.Thread.run(Thread.java:619)] 

我敢肯定,該路徑存在,但我意識到標記爲只讀的文件夾。我試圖刪除只讀標誌,但我無法得到這個工作。

+0

路徑是怎樣的? –

回答

4

確保您的路徑分隔符是正確的..您可以使用單個正斜槓或雙反斜槓。例如,

File f = new File("C:\\Documents and Settings\\thandasoru\\My Documents\\temp.txt"); 
f.createNewFile(); 
+0

這可以使用'File.separator'或'File.separatorChar'來解決。順便說一句,這兩個靜態final字段不遵循Java命名約定。 –

+0

啊,確切!我忘記了File.separatorChar屬性。上面提到的代碼很髒修復我會說;-) – thandasoru

0

如果該文件是臨時的,你可以使用這個功能,你可以忘記所有權限問題:

File.createTempFile("prefix", "suffix") 
0

使用File newFile=new File(folderName+chipItems[i]);,而不是使用File newFile=new File(folderName+chipItems[i], "w");。那會好的。當您喜歡提供Unix touch命令等功能時避免使用文件模式。