O sistema não consegue encontrar o ficheiro indicado em java

Estou a fazer um programa que abre e lê um ficheiro. Este é o meu código.
import java.io.*;

public class FileRead{
    public static void main(String[] args){
        try{
            File file = new File("hello.txt");
            System.out.println(file.getCanonicalPath());
            FileInputStream ft = new FileInputStream(file);

            DataInputStream in = new DataInputStream(ft);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strline;

            while((strline = br.readLine()) != null){
                System.out.println(strline);
            }
            in.close();
        }catch(Exception e){
            System.err.println("Error: " + e.getMessage());
        }
    }
}
Mas quando corro, tenho este erro:
C:\Users\User\Documents\Workspace\FileRead\hello.txt
Error: hello.txt (The system cannot find the file specified)

My FileRead.java and hello.txt where in the same directory that can be found in:

C:\Users\User\Documents\Workspace\FileRead
Pergunto-me o que estou a fazer de errado?

 18
Author: eddie, 2012-07-19

8 answers

Copiei o teu código e funciona bem. Suspeito que esteja apenas a ter algum problema no nome do ficheiro de hello.txt, ou está a correr numa pasta errada. Considere verificar pelo método sugerido por @Eng.Fouad
 7
Author: Adrian Shum, 2012-07-19 02:30:24

Tente listar todos os nomes dos ficheiros no directório, chamando:

File file = new File(".");
for(String fileNames : file.list()) System.out.println(fileNames);

E vê se encontras os teus ficheiros na lista.

 42
Author: Eng.Fouad, 2012-07-19 02:23:44

Geralmente, apenas indicando o nome do ficheiro dentro do construtor de Ficheiros significa que o ficheiro está localizado no mesmo directório que o ficheiro java. No entanto, ao usar IDEs como NetBeans e Eclipse, ou seja, não o caso você tem que salvar o arquivo no diretório de pasta de projeto. Por isso, acho que verificar isso vai resolver o teu problema.

 3
Author: user3051574, 2014-07-01 16:50:57

No seu IDE, carregue com o botão direito no ficheiro que deseja ler e escolha "Copiar o caminho" então cole - o no seu código.

Lembre-se que o windows esconde a extensão do ficheiro, por isso, se criar um ficheiro de texto "myfile.txt pode ser realmente salvo como "myfile".txt.txt

 2
Author: moshik, 2014-01-31 10:44:23

Tem de indicar o nome do local absoluto para onde o ficheiro existe.

        File file = new File("C:\\Users\\User\\Documents\\Workspace\\FileRead\\hello.txt");
 1
Author: user1420750, 2012-07-19 02:27:26
Como está a correr o programa?

Não é o ficheiro java que está a ser executado, mas sim o .class file that is created by compiling the java code. Terá de indicar a localização absoluta, como diz O user1420750, ou uma localização relativa à sua pasta System.getProperty("user.dir"). Esta deve ser a pasta de trabalho ou a pasta de onde você executou o comando java.

 1
Author: km1, 2012-07-19 09:45:16
Quando você corre um jarro, sua classe principal se torna args [0] e seu nome de arquivo vem imediatamente depois.

Eu tinha o mesmo problema: eu poderia localizar o arquivo, quando fornecido o caminho absoluto do eclipse (porque eu estava me referindo ao arquivo como args[0]). No entanto, quando Eu corro o mesmo de jar, ele estava tentando localizar minha classe principal - que é quando eu tive a idéia de que eu deveria estar lendo o meu arquivo de args[1].

 0
Author: sivaram, 2014-07-01 17:06:31

Primeiro crie a pasta da mesma forma que indicou. depois disso, criar o ficheiro

File dir = new File("C:\\USER\\Semple_file\\");
File file = new File("C:\\USER\\Semple_file\\abc.txt");

if(!file.exists())
{
    dir.mkdir();
    file.createNewFile();
    System.out.println("File,Folder Created.);
}
 0
Author: Bhola, 2017-12-20 06:37:28