2016-09-09 3 views
0

Я пытаюсь создать новый файл в каталог, который я знаю, у меня есть разрешения для. Меня не волнует, существует ли этот файл во время создания или нет, поскольку я не против перезаписи. Я пытаюсь использовать библиотеку nio для этого, но постоянно получаю NoSuchFileException. В этом случае нет файла или каталога, потому что я пытаюсь сделать это в первый раз. У меня сложилось впечатление, что новая библиотека Files будет обрабатывать всю запись или создание для меня. Я хотел бы написать этот файл после этого. Что мне здесь не хватает?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

Вместо того, чтобы быть под неправильными впечатлениями, вы должны прочитать javadocs, которые расскажут вам, какие методы на самом деле делают. – 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); 
Смежные вопросы