2016-09-09 13 views
0

私は権限を持っていることがわかっているディレクトリに新しいファイルを作成しようとしています。このファイルが作成時に存在するかどうかは気にしません。上書きしても構いません。私はこのためにnioライブラリを使用しようとしていますが、継続的にNoSuchFileExceptionを取得しています。この場合、私はこれを初めてやろうとしているので、ファイルやディレクトリはありません。私は新しいファイルライブラリが私のための上書きまたは作成のすべてを処理するという印象の下にあった。私はこの作品の後にこのファイルに書きたいと思います。私はここで何が欠けていますか?java 7+ファイルの作成

public static void createTextFile(String fileName)throws IOException{ 

    //Member variables 
    String str_path = "C:\\reports\\errors\\"; 

    Path dir = Paths.get(str_path); 
    Path errorFile = dir.resolve(fileName + ".txt"); 
    Files.createFile(errorFile); 
} 

私は入れません例外:

java.nio.file.NoSuchFileException: C:\reports\errors\alert_exception.txt 
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source) 
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) 
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) 
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(Unknown Source) 
at java.nio.file.Files.newByteChannel(Unknown Source) 
at java.nio.file.Files.createFile(Unknown Source) 
at utilities.Utils.createTextFile(Utils.java:267) 
at listeners.EventHandler.onException(EventHandler.java:32) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.openqa.selenium.support.events.EventFiringWebDriver$1.invoke(EventFiringWebDriver.java:80) 
at com.sun.proxy.$Proxy6.onException(Unknown Source) 
at org.openqa.selenium.support.events.EventFiringWebDriver$2.invoke(EventFiringWebDriver.java:105) 
at com.sun.proxy.$Proxy7.get(Unknown Source) 
at org.openqa.selenium.support.events.EventFiringWebDriver.get(EventFiringWebDriver.java:163) 
at release.SampleTest.ExampleForAlert(SampleTest.java:27) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 
at org.testng.internal.Invoker.invokeMethod(Invoker.java:639) 
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) 
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) 
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 
at org.testng.TestRunner.privateRun(TestRunner.java:774) 
at org.testng.TestRunner.run(TestRunner.java:624) 
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 
at org.testng.SuiteRunner.run(SuiteRunner.java:261) 
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 
at org.testng.TestNG.run(TestNG.java:1048) 
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112) 
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205) 
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176) 
+2

はディレクトリ 'Cを行います\は\が存在しerrors'報告? – hexafraction

+2

間違った印象を受けるのではなく、実際にどのようなメソッドが実行されているかを示すjavadocを読んでください。 – Kayaman

+0

申し訳ありません。私は余分な情報を追加する必要があった。私はディレクトリが毎回ゼロから作成される必要があると仮定する必要があります。彼らはそこにいなければ私は気にしません私は新鮮なものを作る必要があります。 –

答えて

1

は、私はあなたがチェックのカップルをしなければならないと思います。

  1. ディレクトリが存在しない場合は、自動的に作成されないため、ディレクトリが存在するかどうかを確認してください。
  2. 作成しようとしているファイルが存在する場合は、createFile()メソッドで例外がスローされますので、既存のファイルを使用するか、既存のファイルを削除して新しいファイルを作成する必要があります。

だから、次は私があなたの条件に応じて新しいファイルを作成したい場合、私はどうなるのかです:

String str_path = "C:\\reports\\errors\\"; 
Path dir = Paths.get(str_path); 
if (Files.notExists(dir)) { 
    dir = Files.createDirectory(dir); 
} 
Path errorFile = dir.resolve(fielname + ".txt"); 
Files.deleteIfExists(errorFile); 
Files.createFile(errorFile); 
関連する問題