Java.io.FileNotFoundException: sistem belirtilen dosyayı bulamıyor

Böylece bir süre bununla sıkışıp kaldım. Temel olarak, "word.txt" adıyla oluşturulmuş bir dosyam var ve programı ne zaman çalıştırsam, bana şu hatayı veriyor:

 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.<init>(Unknown Source) at java.util.Scanner.<init>(Unknown Source) at Hangman1.main(Hangman1.java:6) 

İşte kodum:

 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(); } } 

İronik olarak, "word.txt" dosyasını java dosyamla aynı dizinde oluşturdum ve yine de bana bu hatayı veriyor.

35
09 нояб. adı123 09 Kasım ayarlayın. 2013-11-09 06:13 '13, 06:13 2013-11-09 06:13
@ 8 cevaplar

Word.txt dosyasını doğrudan projenin kök klasörünün ve akran kaynaklarının bir çocuğu olarak yerleştirin

 Project_Root src word.txt 

Feragatname: Bunun neden bu vaka için işe yaradığını ve neden diğerleri için çalışmayabileceğini açıklamak istiyorum.

Neden çalışıyor:

File veya başka bir FileXxx varyantını kullandığınızda, dosya sisteminde "çalışma dizini" ne göre bir dosya arıyorsunuz. Çalışma dizini şu şekilde tanımlanabilir:

Komut satırından başlatıldığında

C:\EclipseWorkspace\ProjectRoot\bin > java com.mypackage.Hangman1

çalışma dizini C:\EclipseWorkspace\ProjectRoot\bin . IDE'nizle (en azından birlikte çalıştığım kişilerle), çalışma dizini ProjectRoot . Bu nedenle, dosya ProjectRoot , göreli yol kök dizininde olduğundan geçerli olduğundan, yalnızca dosya adını kullanın.

Benzer şekilde, eğer bu sizin ProjectRoot\src\word.txt proje ProjectRoot\src\word.txt , "src/word.txt" yolu geçerli olurdu.

Neden çalışmıyor

İlk olarak, çalışma dizini daima değişebilir. Örneğin, kodu yukarıdaki örnekte olduğu gibi komut satırından çalıştırarak, çalışma dizini bin . Böylece, bu durumda, başarısız olur çünkü bin\word.txt mevcut değil

İkincisi, bu projeyi bir bankaya verecekseniz ve dosya bankaya dahil edilecek şekilde yapılandırılmışsa, yol artık geçerli olmayacağından da başarısız olur.

Aynı zamanda dosyanın (veya sadece "kaynak" - bazen değişmeli kullanacağım terimler) olması gerekip gerekmediğini belirlemeniz gerekir. Bu durumda, sınıf yolunda bir dosya oluşturmak ve bir URL yoluyla erişmek isteyeceksiniz. Yapmanız gereken ilk şey (bu özel durumda), dosyanın sınıf yoluna gömülü olduğundan emin olmaktır. Proje kökünde bulunan dosya ile, derlemeyi dosyayı içerecek şekilde yapılandırmanız gerekir. Ancak, dosyayı src veya aşağıdaki bazı dizine koyarsanız, varsayılan derleme onu sınıf yoluna koymalıdır.

Sınıf yolu kaynağına çeşitli yollarla erişebilirsiniz. Kaynak almak için sınıf yolunu kullandığınız getResourceXxx yöntemine sahip Class sınıfını kullanabilirsiniz.

Örneğin, proje yapısını ProjectRoot\src\resources\word.txt , şunu kullanabilirsiniz:

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

getResourceAsStream , bir InputStream getResourceAsStream döndürür, ancak başlık altında bir URL alır. Ek olarak, gerekirse URL de alabilirsiniz. getResource() URL'yi döndürür

Dizin yapısının src/main/resources benzer olduğu Maven kullanıcıları src/main/resources , resources klasörünün içeriği sınıf yolunun kök dizinine yerleştirilir. Bu nedenle, bir dosyanız varsa, getResourceAsStream("/thefile.txt") kullanabilirsiniz.

68
09 нояб. Cevap Paul Samsotha 09 Kasım tarafından verildi. 2013-11-09 06:24 '13 6:24 2013-11-09 06:24

Bağıl yollar kullanılabilir, ancak bunlar karmaşık olabilir. En iyi çözüm, dosyalarınızın nerede depolandığını bulmak, yani klasörü yazdırmaktır:

 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(); } } 
border=0

Bu kod, aradığı klasörü yazdırmalıdır. Dosyayı oraya koy, iyi olacaksın.

12
09 нояб. Cevap acdcjunior 09 Kasım'da verilir. 2013-11-09 06:22 '13 6:22 2013-11-09 06:22

Dosyanız doğrudan proje klasörünün altında bulunmalı ve başka bir alt klasörün içinde bulunmamalıdır.

Örneğin, proje klasörünüz bu şekilde adlandırılmışsa. AProject , src klasörünüzle aynı yerde olmalıdır.

 Aproject src word.txt 
2
09 нояб. Cevap LotusUNSW 09 Kasım'da verilir. 2013-11-09 06:26 '13 6 : 26'da, 2013-11-09 06:26

"Name.txt" adını girmediğiniz bir txt dosyası oluştururken, sadece "name" girin. Name.txt yazarsanız, Eclipse onu name.txt.txt olarak görür. Bu benim için çözdü. Ayrıca dosyayı .java klasörüne değil, bir klasöre kadar src klasörüne kaydedin.

1
12 апр. Cevap 12 Nisan tarihinde Victor tarafından verildi. 2016-04-12 22:22 '16, 10:22, 2016-04-12 22:22

Bence her zaman classpath yoluna kadar kaynar. Scanner input = new Scanner(new File("word.txt")); aynı klasörden Scanner input = new Scanner(new File("word.txt")); değiştirin Scanner input = new Scanner(new File("word.txt")); Scanner input = new Scanner(new File("./word.txt")); hangi çalışması gerekir

1
09 нояб. Tarafından verilen cevap Alex 09 Kas. 2013-11-09 06:28 '13 6:28 2013-11-09 06:28
 System.out.println("To Read the file"+input.getCanonicalPath()); try to put it...in your code.... 
0
09 нояб. Cevap Vinay Maneti 09 Kasım tarafından verildi. 2013-11-09 06:30 '13 6: 30'da 2013-11-09 06:30

Özellikler dosyasından yolu okudum ve sonunda boşluk olduğunu belirtmedim. Sende olmadığından emin ol.

0
15 февр. Cevap 15 Şubat'ta Neftaniç tarafından verildi . 2017-02-15 14:36 '17, 14:36, 2017-02-15 14:36

Bende de aynı problem var ama nedenini biliyor musun? Dosyamın sonuna .txt koymadığım için ve bu nedenle bir dosya olduğu için bir textFile dosyası olmadı, sadece iki şey yapabilirsiniz:

  1. Metin dosyanızı kök dizine yerleştirin (örneğin, HelloWorld adlı bir projeniz varsa, paket dizinindeki HelloWorld dosyasını sağ tıklatın ve dosyayı oluşturun.
  2. Bu dosyayı istediğiniz adla kaydedin, ancak .txt ile bunun sonunda sorununun çözüldüğünü düşünüyorum ama başkalarına da yazarım. Teşekkür ederim
0
16 июня '18 в 18:30 2018-06-16 18:30 Cevap, Maden Dev tarafından 16 Haziran 1830, 18: 30’da verilmiştir. 2018-06-16 18:30

veya soru sor ile ilgili diğer sorular