2016-01-26 2 views
1

в классе JsonOperation:Как создать файл в папке проекта в Java?

public void writeJson(String path, JSONObject passedJsonObj){ 
    File file = new File(path); 
    try{ 
     if (!file.exists()){ 
      file.createNewFile(); 
     } 
     FileWriter writer = new FileWriter(file); 
     writer.write(passedJsonObj.toJSONString()); 
     writer.flush(); 
     writer.close(); 
    }catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 

в моем главном классе вызывающего:

LocalDate todayDate = LocalDate.now(); 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); 
    String dateString = todayDate.format(formatter).toString(); 

    JsonOperation jsonOp = new JsonOperation(); 
    jsonOp.writeJson("srcsample/SaveData.json", jsonOp.toJsonObj("dateToday", dateString)); 

Во время работы этого я получил эти ошибки:

java.io.IOException: The system cannot find the path specified 
    at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(File.java:1012) 
    at sample.JsonOperation.writeJson(JsonOperation.java:50) 
    at sample.Main.saveData(Main.java:58) 
    at sample.Main.start(Main.java:29) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$52/384953125.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$48/113087735.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$50/949297714.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$49/59984698.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101) 
    at com.sun.glass.ui.win.WinApplication$$Lambda$38/665838427.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:745) 

Когда я изменяю

jsonOp.writeJson("\\src\\sample\\SaveData.json", jsonOp.toJsonObj("dateToday", dateString)); 

в

jsonOp.writeJson("SaveData.json", jsonOp.toJsonObj("dateToday", dateString)); 

он не дает мне какую-либо ошибки, но она создает файл вне Src папки. Что делать, чтобы создать файл внутри папки с образцом?

Мой проект иерархия: WordToday>src>sample

+1

Я просто понял ** образец * * на самом деле представляет собой пакет java. Но он отображается как папка в моем проводнике файлов. – absolutezero

+0

Пакеты * * в папках в Java-проекте. Так работает Java. Но я бы рекомендовал (сильно) против записи в ваш проект, что сделает его зависимым от наличия исходного дерева. Используйте настраиваемое внешнее местоположение. –

ответ

2

В моем проекте я создал папку «Logs» вне папки Src с определением файла:

File file = new File("logs/file.txt") 

Так что ожидают, что вы можете сделать файл существует с File ("/ file.txt")

+0

Спасибо. Думаю, я пойду с этим. – absolutezero

+0

Сделал/Это работает? – rapgru

+0

yup it. Но я не понимаю, почему я не могу создать файл внутри папки src. – absolutezero

2

Попробуйте использовать путь asbolute. Когда вы используете относительный путь, файл не создается внутри папки, которую вы так думаете.

Вы можете попробовать следующее, чтобы проверить, где ваш относительный путь:

Path currentRelativePath = Paths.get(""); 
String s = currentRelativePath.toAbsolutePath().toString(); 
System.out.println("Current relative path is: " + s); 

Попробуйте и дайте мне знать.

EDIT: Смотрите это для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

+0

Такая же ошибка. Я могу создать файл за пределами папки src – absolutezero

1
  1. Для создания в любой папке

    File file = new File("C:\\Users\\YourUserName\\Directory\\fileName.txt");

  2. Для проекта в каталоге

    File = new File("directory/fileName.txt");

  3. Проверьте, существует ли файл, если не создать новый

    if (!file.exists()) { file.createNewFile(); }

Смежные вопросы