Java не удается найти указанный файл

Система не может найти указанный файл Java

Да, я уже знаю, что этот вопрос является дубликатом, но просто медведь со мной здесь. На это не ответил ни один из других вопросов. Это мой код:

package pc.setup; import java.io.IOException; public class DirectoryCreator < public static void setupDirectories() throws IOException < Runtime.getRuntime().exec("cd\\"); >> 
Exception in thread "main" java.io.IOException: Cannot run program "cd\": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at pc.setup.DirectoryCreator.setupDirectories(DirectoryCreator.java:7) at pc.load.PieClickerRunner.main(PieClickerRunner.java:9) Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source) . 6 more 

3 ответа

Спасибо всем за ваши ответы. Однако они были многословными, поэтому в этом ответе я попытаюсь обобщить его.

Когда вы вызываете Runtime.getRuntime.exec() , вы должны указать, какую оболочку вы используете (только в Windows). Итак, вы бы сказали Runtime.getRuntime.exec(«command here», «cmd.exe») . Как вы, наверное, знаете, CMD — это командная оболочка Windows для современных операционных систем Windows.

Еще раз благодарю вас за ваши ответы.

  • cd не является исполняемым самостоятельно; это встроенная оболочка командной строки. exec выполняет только исполняемые файлы (в своих файлах). Вот почему он не найден. exec может запускать командную оболочку, но.
  • Даже если вы изменили каталог в командной оболочке, это изменение действует только для вновь созданного процесса, а не для программы, которая запустила его.
Читайте также:  Javascript заменить символ строки

Извините, но этот подход не работает на Java.

Я предполагаю, что вы запускаете это приложение в семействе операционных систем Windows (в противном случае вам придется немного его адаптировать). Для выполнения исполняемых команд используется метод Runtime.exec() . Это не относится к dir, cd, copy, . В результате этого он вызывает исключение, которое вы испытываете.

Команда cd является частью интерпретатора команд команд cmd. Он может быть выполнен с помощью command.com или cmd.exe зависимости от версии операционной системы.

Поэтому сначала нужно запустить командный интерпретатор и передать ему предоставленную пользователем команду (например, dir, cd, copy, . )

Вот программа, которая делает это. Он проверяет os.name среды os.name , чтобы выбрать правильный интерпретатор команд. Я тестирую Windows NT и Windows 95. Если ни один из этих двух не найден, но все еще является операционной системой Windows, я предполагаю, что это современные окна (например, Windows 7 или Windows 8), и он использует cmd.exe.

import java.util.*; import java.io.*; class StreamGobbler extends Thread < InputStream is; String type; StreamGobbler(InputStream is, String type) < this.is = is; this.type = type; >public void run() < try < InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line=null; while ( (line = br.readLine()) != null) System.out.println(type + ">" + line); > catch (IOException ioe) < ioe.printStackTrace(); >> > public class GoodWindowsExec < public static void main(String args[]) < if (args.length < 1) < System.out.println("USAGE: java GoodWindowsExec "); System.exit(1); > try < String osName = System.getProperty("os.name" ); System.out.println("OS NAME IS " + osName); String[] cmd = new String[3]; if( osName.equals( "Windows NT" ) ) < cmd[0] = "cmd.exe" ; cmd[1] = "/C" ; cmd[2] = args[0]; >else if( osName.equals( "Windows 95" ) ) < cmd[0] = "command.com" ; cmd[1] = "/C" ; cmd[2] = args[0]; >else if (osName.toUpperCase().trim().contains("WINDOWS")) < cmd[0] = "cmd.exe" ; cmd[1] = "/C" ; cmd[2] = args[0]; >Runtime rt = Runtime.getRuntime(); System.out.println("Execing " + cmd[0] + " " + cmd[1] + " " + cmd[2]); Process proc = rt.exec(cmd); // any error message? StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR"); // any output? StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT"); // kick them off errorGobbler.start(); outputGobbler.start(); // any error. int exitVal = proc.waitFor(); System.out.println("ExitValue: " + exitVal); > catch (Throwable t) < t.printStackTrace(); >> > 

Вот простой бегун для этого класса

public class GoodWindowsExecRunner < public static void main(String[] args) < //GoodWindowsExec.main(new String[] ); GoodWindowsExec.main(new String[] ); > > 

Вот результат выполнения команды «cd..»

Изображение 513837

Вот результат выполнения «dir». команда

Изображение 513840

Существует отличная статья о мире java под названием Когда Runtime.exec не будет

Источник

Не удается найти указанный файл

Мне выкидывает java.io.FileNotFoundException (Не удается найти указанный файл). Файл есть! Что я не так делаю?

Не удается найти указанный файл
Всем привет) почему он у меня выдает ошибку о том что не видит файл, хотя путь указал. Exception.

Консольный калькулятор — Не удается найти указанный файл
Начал делать консольный калькулятор, в котором каждая операция представляет собой отдельный класс.

Java | Не удаётся найти указанный файл
Проблема состоит вот в чём. Сегодня скачал книжку Хортсмана: Java. Том 1. Основы.. До этого начал.

Не удается запустить программу. Не удается найти указанный файл. Microsoft visual studio
Добрый день. Начал работу с программой, написал первую программу. текст приложу ниже. Программа.

Странно должно все работать. Я попробовал у меня работает.
У тебя файл input.txt точно в корне диска С: стоит ?

ЦитатаСообщение от Lendon Посмотреть сообщение

Странно должно все работать. Я попробовал у меня работает.
У тебя файл input.txt точно в корне диска С: стоит ?

Да, в корне. Уже и куда только записывать не пробовал и как только не переименовывал, не работает Может у компилятора опции какие по-умолчанию отключены и надо явно указать? Просто я яву только начал осваивать и самостоятельно не до всего дойти могу.

Добавлено через 13 минут
Сейчас запустил в ХРюше, все работает. Проблема проявляется только в Win7. Козни майкрософт

larev01, да, с семеркой пока проблемы. Судя по всему для семерки нужно качать jdk 7. На сайте санов есть бета-версия.

Всем привет. У меня такая же ситуация, как у larev01, ОС — XP sp3.
В чем проблема не знаю. При чем, что интересно — существует проект, в данной рабочей области (workspace), в котором считываются данные с файла и все работает. Этот проект был создан раньше, данного.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import java.io.File; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO code application logic here try { String dir = System.getProperty("user.dir"); System.out.println(dir); File file = new File("input.txt"); Scanner sc = new Scanner(file); int var = sc.nextInt(); System.out.print(var); } catch(Exception e) { e.printStackTrace(); } } }

Вывод:
java.io.FileNotFoundException: input.txt (Не удается найти указанный файл)
D:\PROGRAMMING\PROJECTS\keyboard66
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:146)
at java.util.Scanner.(Scanner.java:656)
at Main.main(Main.java:13)

Источник

Не находит файл

при решении через IDE не находит файл. антивирус отключил пути прописаны пробовал как и полный путь указания файла, так и положить в папку с заданием от JavaRush где может быть косяк? сама задача валидацию прошла и решена WIN10 64

package com.javarush.task.task13.task1318; import java.io.*; import java.util.Scanner; /* Чтение файла */ public class Solution  static String fileName; public static void main(String[] args) throws Exception  BufferedReader nameReader = new BufferedReader(new InputStreamReader(System.in)); fileName = nameReader.readLine(); InputStream fileData = new FileInputStream(fileName); while (fileData.available()> 0) System.out.print((char) fileData.read()); > nameReader.close(); fileData.close(); > >

Источник

Java.io.FileNotFoundException: система не может найти указанный файл

Так что я некоторое время застрял на этом. В принципе, у меня есть файл, созданный с именем «word.txt», и всякий раз, когда я запускаю программу, он дает мне эту ошибку:

Exception in thread "main" java.io.FileNotFoundException: word.txt (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.(Unknown Source) at java.util.Scanner.(Unknown Source) at Hangman1.main(Hangman1.java:6) 
import java.io.File; import java.util.*; public class Hangman1 < public static void main(String[] args) throws Exception < Scanner input = new Scanner(new File("word.txt")); String in = ""; in = input.nextLine(); >> 

По иронии судьбы, я создал файл «word.txt» в том же каталоге, что и мой java файл, и тем не менее он все еще дает мне эту ошибку.

ОТВЕТЫ

Ответ 1

Поместите 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 или в некоторый каталог ниже, то сборка по умолчанию должна поместить его в путь класса.

Вы можете получить доступ к ресурсу classpath несколькими способами. Вы можете использовать класс Class , у которого есть метод getResourceXxx , из которого вы используете для получения ресурсов classpath.

Например, если вы изменили структуру проекта на ProjectRoot\src\resources\word.txt , вы можете использовать это:

InputStream is = Hangman1.class.getResourceAsStream("/resources/word.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

getResourceAsStream возвращает InputStream , но получает URL-адрес под капотом. Кроме того, вы можете получить URL , если это вам нужно. getResource() вернет URL

Для пользователей Maven, где структура каталогов похожа на src/main/resources , содержимое папки resources помещается в корень пути к классам. Поэтому, если у вас есть файл, вы можете использовать getResourceAsStream(«/thefile.txt»)

Ответ 2

Относительные пути могут использоваться, но они могут быть сложными. Лучшее решение — узнать, где хранятся ваши файлы, то есть распечатать папку:

import java.io.File; import java.util.*; public class Hangman1 < public static void main(String[] args) throws Exception < File myFile = new File("word.txt"); System.out.println("Attempting to read from file in: "+myFile.getCanonicalPath()); Scanner input = new Scanner(myFile); String in = ""; in = input.nextLine(); >> 

Этот код должен печатать папку, в которой он ищет. Поместите там файл, и вам будет хорошо.

Ответ 3

Ваш файл должен находиться непосредственно под папкой проекта, а не внутри любой другой подпапки.

Если папка вашего проекта названа так, например. AProject , он должен находиться в том же месте, что и ваша папка src .

Ответ 4

Я думаю, что он всегда кипит до classpath . сказав, что если вы запустите из той же папки, где ваш .class затем измените Scanner input = new Scanner(new File(«word.txt»)); на Scanner input = new Scanner(new File(«./word.txt»)); , который должен работать

Ответ 5

Убедитесь, что при создании txt файла, который вы не введете имя «name.txt», просто введите «имя». Если вы наберете «name.txt», Eclipse увидит его как «name.txt.txt». Это решило это для меня. Также сохраните файл в папке src, а не в папке .java, одна папка вверх.

Ответ 6

System.out.println("To Read the file"+input.getCanonicalPath()); try to put it. in your code. 

Ответ 7

Я читал путь из файла свойств и не упоминал, что в конце было пространство. Убедитесь, что у вас его нет.

Ответ 8

У меня такая же проблема, но знаете почему? потому что я не поместил.txt в конец моего Файла, и поэтому это был Файл не textFile, вы можете сделать только две вещи:

  1. Поместите свой текстовый файл в корневой каталог (например, если у вас есть проект под названием HelloWorld, просто щелкните правой кнопкой мыши файл HelloWorld в каталоге пакетов и создайте файл
  2. Сохраните этот файл с любым именем, которое вы хотите, но с.txt, в конце этого, я думаю, ваша проблема решена, но я пишу это другим людям. Благодарю.

Источник

Оцените статью