Java io filenotfoundexception plugins authme geolite2 country mmdb не удается найти указанный файл
поэтому я застрял на этом некоторое время. В принципе, у меня есть файл, созданный под названием "Слово.txt " и всякий раз, когда я запускаю программу, она дает мне эту ошибку:
по иронии судьбы, я создал файл " word.txt" в том же каталоге, что и мой java-файл, и все же он все еще дает мне эту ошибку.
вставить слово.txt непосредственно в качестве дочернего элемента корневой папки проекта и однорангового узла src
отказ от ответственности: я хотел бы объяснить, почему это работает в данном конкретном случае и почему это может не работать для других.
почему это работает:
при использовании File или любой другой FileXxx варианты, вы ищете файл в файловой системе относительно "рабочий каталог". Работа каталог, можно описать следующим образом:
при запуске из командной строки
C:\EclipseWorkspace\ProjectRoot\bin > java com.mypackage.Hangman1
рабочий каталог-это C:\EclipseWorkspace\ProjectRoot\bin . С вашей IDE (по крайней мере все те, с которыми я работал), рабочий каталог-это ProjectRoot . Поэтому, когда файл находится в ProjectRoot , а затем использовать только имя файла в качестве относительного пути допустимо, потому что он находится в корне рабочего каталога.
аналогично, если это был ваш проект структура ProjectRoot\src\word.txt , тогда путь "src/word.txt" будет действительным.
почему это может не сработать
во-первых, рабочий каталог всегда может измениться. Например, при запуске кода из командной строки, как в приведенном выше примере, рабочим каталогом является bin . Так что в этом случае он потерпит неудачу, так как нет bin\word.txt
во-вторых, если вы должны были экспортировать этот проект в jar, и файл был настроен для включения в jar, он также потерпит неудачу, так как путь больше не будет действительным.
это, как говорится, вам нужно определить, должен ли файл быть встроенный-ресурс (или просто "ресурс" - термины, которые иногда я буду использовать как синонимы). Если это так, то вы захотите создать файл в пути к классам и получить к нему доступ через URL-адрес. Первое, что вам нужно будет сделать (в данном конкретном случае), это убедиться, что файл get построен в classpath. С файлом в корень проекта, вы должны настроить сборку для включения файла. но если вы поместите файл в src или в некотором каталоге ниже, тогда сборка по умолчанию должна поместить ее в путь к классу.
вы можете получить доступ к ресурсу classpath несколькими способами. Вы можете использовать Class класс, который имеет getResourceXxx метод, из которого вы используете для получения ресурсов classpath.
например, если вы изменили структуру своего проекта ProjectRoot\src\resources\word.txt , вы можете использовать это:
getResourceAsStream возвращает InputStream , но получает URL-адрес под капотом. Кроме того, вы можете получить URL если это то, что вам нужно. getResource() вернет URL
для пользователей Maven, где структура каталогов похожа на src/main/resources содержимое resources папка помещается в корень пути к классам. Поэтому, если у вас есть файл, вы будете использовать только getResourceAsStream("/thefile.txt")
можно использовать относительные пути, но они могут быть сложными. Лучшее решение-знать, где сохраняются ваши файлы, то есть распечатать папку:
этот код должен печатать папку, в которой он ищет. Поместите файл туда, и вы будете хорошо идти.
ваш файл должен находиться непосредственно под папкой проекта, а не внутри любой другой подпапки.
если папка вашего проекта называется, например, AProject , он должен быть в том же месте, что и ваш .
Я думаю, это всегда сводится к classpath . сказав это, если вы запустите из той же папки, где ваш .класс тогда change Scanner input = new Scanner(new File("word.txt")); to Scanner input = new Scanner(new File("./word.txt")); это должно работать
убедитесь, что при создании txt-файла вы не вводите имя "name.txt", просто введите "имя". Если ввести " name.txt "Eclipse увидит это как" имя.формат txt.формат txt." Это решило все за меня. Также сохраните файл в папке src, а не в папке .java находится, одна папка вверх.
Я читал путь из файла свойств и не упоминал, что в конце было место. Убедитесь, что у вас его нет.
У меня такая же проблема, но знаешь почему? потому что я не ставил .txt в конце моего файла, и поэтому это был файл не текстовый файл, вы должны сделать только две вещи:
My application runs file because Eclipse IDE includes that under that cp but when I'm running the packaged jar it is not reading the file.
The text was updated successfully, but these errors were encountered:
2 ответа
Вы можете использовать конструктор File Файл (URI uri) преобразует ваш URL URL-адрес в URI и передает его в качестве аргумента для конструктора File , как показано ниже:
Бит file: создает то, что вы видите на самом деле не путь к файлу, а URL.
URL имеет метод toFile() , который ближе к тому, что вы хотите, но все же не тот, который вы на самом деле ищете, а именно getResourceAsStream :
Подходящим способом вызова getResource / getResourceAsStream является Play.class.getResource , а не getClass().getResource . Мелкая гнида; вариант getClass() не идиоматичен и строго хуже / менее читабелен: если Play когда-либо разделяется на подклассы, он ломается, тогда как Play.class.getResource этого не происходит. Даже если это не актуально, лучше использовать стиль, который более идиоматичен, а правильный ответ - строго больше сценариев.
Как правило, если вы преобразуете полученный ресурс в файл, который вы испортили; смысл getResource - предоставить вам ресурсы из того же места, где находятся ваши классы, и они не обязательно должны быть файлами . Это могут быть записи в банке (которые сами по себе не являются файлами, и к ним нельзя получить прямой доступ как java.io.File или как java.nio.path.Path ), передаваемые по сети и генерируемые на лету. - все идет, в этом смысл абстракции. В этом случае вы берете свой файл и немедленно превращаете его в InputStream . Не делайте этого - абстракция getResource может сделать это.
Как и все ресурсы, вы не можете просто открыть поток ввода, как это. Вы должны убедиться, что он также закрыт, независимо от того, что происходит. Для этого используйте try-with-resources.
Собираем все вместе:
Не нужно закрывать его; Конструкция try позаботится об этом за вас. Неважно, как код «выходит» из этих фигурных скобок (выполняя его до конца, через return или через какой-либо другой поток управления, или через исключение) - этот входной поток будет закрыт.
wilkinsona commented Jul 27, 2020
@ohbus Unfortunately, this sort of back-and-forth isn't well-suited to the issue tracker as it creates a lot of notifications for everyone watching the repository. If you'd like to have a discussion, Gitter is a better place to have it. Alternatively, it you have a question, the spring-boot tag on Stack Overflow is a good option.
[Ely.By Skinsystem] May be interfering with another skin plugin.
[Spartan] Loaded class es.pollitoyeye.vehicles.events.VehicleExitEvent from Vehicles v10.7 which is not a depend, softdepend or loadbefore of this plugin.
[AuthMe] No MaxMind credentials found in the configuration file! GeoIp protections will be disabled.
[AuthMe] Could not download GeoLiteAPI database [FileNotFoundException]: plugins\AuthMe\GeoLite2-Country.mmdb (Не удается найти указанный файл)
[ChestSort] Loaded class me.clip.placeholderapi.expansion.PlaceholderExpansion from PlaceholderAPI v2.10.6 which is not a depend, softdepend or loadbefore of this plugin.
[MessageAnnouncer] Your sound NOTE_PLING is invalid!
The following materials are allowed to have stacks larger than the vanilla size: POTION
[IllegalStack] Loaded class com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent from mcMMO v2.1.130 which is not a depend, softdepend or loadbefore of this plugin.
[Timeismoney] Loaded class net.milkbowl.vault.economy.Economy from Vault v1.7.3-b131 which is not a depend, softdepend or loadbefore of this plugin.
Есть ещё вотето [CustomRecipe] Your current version is old [CustomRecipe] Please update the plugin to null
[UltraPermissions] Loaded class net.milkbowl.vault.permission.Permission from Vault v1.7.3-b131 which is not a depend, softdepend or loadbefore of this plugin.
[UltraPermissions] Loaded class me.clip.placeholderapi.expansion.PlaceholderExpansion from PlaceholderAPI v2.10.6 which is not a depend, softdepend or loadbefore of this plugin.
[Vault] Loaded class com.earth2me.essentials.api.Economy from Essentials v2.18.0.0 which is not a depend, softdepend or loadbefore of this plugin.
[ProtocolLib] Version (MC: 1.16.1) has not yet been tested! Proceed with caution.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.boydti.fawe.util.ReflectionUtils (file:/E:/Servers/Server%201.16.1/plugins/FastAsyncWorldEdit-1.16-302.jar) to field java.lang.Enum.ordinal
WARNING: Please consider reporting this to the maintainers of com.boydti.fawe.util.ReflectionUtils
WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[NametagEdit] Loaded class me.clip.placeholderapi.PlaceholderAPIPlugin from PlaceholderAPI v2.10.6 which is not a depend, softdepend or loadbefore of this plugin.
Он находится в том же каталоге, что и мой файл java .
Но когда я пытаюсь получить к нему доступ в следующем коде, возникает ошибка файл не найден :
Поместите word.txt непосредственно как дочерний элемент корневой папки проекта и одноранговый элемент src
Заявление об ограничении ответственности: я хотел бы объяснить, почему это работает в данном конкретном случае и почему может не работать в других.
Почему это работает:
Когда вы используете File или любой из других вариантов FileXxx , вы ищете файл в файловой системе относительно "рабочего каталога" . Рабочий каталог можно описать так:
Когда вы запускаете из командной строки
C:\EclipseWorkspace\ProjectRoot\bin > java com.mypackage.Hangman1
Рабочий каталог: C:\EclipseWorkspace\ProjectRoot\bin . В вашей среде IDE (по крайней мере, во всех тех, с которыми я работал) рабочий каталог - это ProjectRoot . Поэтому, когда файл находится в ProjectRoot , тогда использование только имени файла в качестве относительного пути допустимо, поскольку оно находится в корне рабочего каталога.
Точно так же, если бы это была структура вашего проекта ProjectRoot\src\word.txt , тогда путь "src/word.txt" был бы действительным.
Почему это может не сработать
Во-первых, рабочий каталог всегда может измениться. Например, при запуске кода из командной строки, как в примере выше, рабочий каталог - это bin . Так что в этом случае это не удастся, поскольку нет bin\word.txt
Во-вторых, если вы экспортируете этот проект в банку, и файл был настроен для включения в банку, это также не сработает, так как путь также больше не будет действительным.
При этом вам необходимо определить, должен ли файл быть embedded-resource (или просто" ресурс "- термины, которые я иногда использую как синонимы). Если это так, то вы захотите встроить файл в путь к классам и получить к нему доступ через URL-адрес. Первое, что вам нужно сделать (в данном конкретном случае), это убедиться, что файл встроен в путь к классам. Если файл находится в корне проекта, вы должны настроить сборку для включения файла. Но если вы поместите файл в src или в какой-либо каталог ниже, то сборка по умолчанию должна поместить его в путь к классу.
Вы можете получить доступ к ресурсу пути к классам несколькими способами. Вы можете использовать класс Class , который имеет метод getResourceXxx , который вы используете для получения ресурсов пути к классам.
Например, если вы изменили структуру проекта на ProjectRoot\src\resources\word.txt , вы можете использовать это:
Для пользователей Maven, где структура каталогов подобна src/main/resources , содержимое папки resources помещается в корень пути к классам. Поэтому, если у вас есть файл, вы должны использовать только getResourceAsStream("/thefile.txt")
Я думаю, это всегда закипает до classpath . сказав, что если вы запускаете из той же папки, где находится ваш .class, тогда измените Scanner input = new Scanner(new File("word.txt")); на Scanner input = new Scanner(new File("./word.txt")); , что должно работать
Попробуйте создать файл с помощью кода, чтобы вы узнали путь к файлу, в котором система создает
У меня такая же проблема, но знаете почему? поскольку я не поместил .txt в конец своего файла, и поэтому это был файл, а не текстовый файл, вам нужно сделать только две вещи:
- Поместите текстовый файл в корневой каталог (например, если у вас есть проект HelloWorld, просто щелкните правой кнопкой мыши файл HelloWorld в каталоге пакетов и создайте файл
- Сохраните как этот файл с любым именем, но с расширением .txt в конце, я думаю, ваша проблема решена, но я пишу это другим людям, которые это знают. Спасибо.
Убедитесь, что при создании текстового файла вы не вводите имя «name.txt», а просто набираете «имя». Если вы наберете «name.txt», Eclipse увидит его как «name.txt.txt». Это решило проблему для меня. Также сохраните файл в папке src, а не в папке, где находится .java, на одну папку вверх.
Я читал путь из файла свойств и не упомянул, что в конце есть пробел. Убедитесь, что у вас его нет.
Ваш файл должен находиться непосредственно в папке проекта, а не внутри какой-либо другой подпапки.
Если папка вашего проекта названа, например, AProject , он должен находиться в том же месте, что и ваша папка src .
Можно использовать относительные пути, но они могут быть непростыми. Лучшее решение - узнать, где сохраняются ваши файлы, то есть распечатать папку:
Этот код должен распечатать папку, в которой он ищет. Поместите файл туда, и все будет хорошо.
Если я скопирую это непосредственно и поместу это в коробку помещения URL хрома. файл открывается но строка:
Выдает файл не найден
Спасибо тебе за помощь.
ohbus commented Jul 27, 2020
Hi @ohbus .
Your code doesn't work simply because you're trying to access your resource, which is bundled inside a jar file, as a File . A File represents. a file on the file system. You can't use a File to access a resource bundled inside a jar, because. it's not in the file system.
Use getClass().getClassLoader().getResourceAsStream("exampleFolder/exampleFile.extension") to get an InputStream that you can read from. That will work whether or not your resource is bundled inside the jar.
You should ask such questions on StackOverflow rather than opening an issue. But search for existing questions first, because that question has been asked many many times already.
No I'm not trying to access a jar, instead I'm trying to access a file. It is running smoothly in my IDE but I can't make it run from the bundled jar which maven makes.
Personal opinion, Stack overflow answers did not help and when I post something it was very toxic. I love this GitHub community.
jnizet commented Jul 27, 2020
Please read my suggestionn again. I never claimed you were trying to access a jar. I said that you were trying to access a classpath resource, which is bundled inside a jar file. And using getResourceAsStream as I showed in my previous answer is the right way to access a classpath resource, whether or not it's bundled in a jar file (so it will work both in your IDE, and when the app is bundled as a jar file).
ohbus commented Jul 27, 2020
Hi @ohbus .
Your code doesn't work simply because you're trying to access your resource, which is bundled inside a jar file, as a File . A File represents. a file on the file system. You can't use a File to access a resource bundled inside a jar, because. it's not in the file system.
Use getClass().getClassLoader().getResourceAsStream("exampleFolder/exampleFile.extension") to get an InputStream that you can read from. That will work whether or not your resource is bundled inside the jar.
You should ask such questions on StackOverflow rather than opening an issue. But search for existing questions first, because that question has been asked many many times already.
No I'm not trying to access a jar, instead I'm trying to access a file. It is running smoothly in my IDE but I can't make it run from the bundled jar which maven makes.
Personal opinion, Stack overflow answers did not help and when I post something it was very toxic. I love this GitHub community.
ohbus commented Jul 27, 2020
Can you please help me out. I cannot understand how to do this.
Читайте также: