【问题标题】:java trouble getting FileReader to workjava 让 FileReader 工作的麻烦
【发布时间】:2016-03-15 16:13:35
【问题描述】:

根目录名为CopyFile,有目录files和src。文件具有文本文件 loremipsum.txt。 src 有 com/example/java/Main.java

这是 Main.java 中的代码

package com.example.java;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;

public class Main {

    public static void main(String[] args) {

        String sourceFile = "files/loremipsum.txt";
        String targetFile = "files/target.txt";

        try (FileReader fReader = new FileReader(sourceFile);
             BufferedReader bReader = new BufferedReader(fReader);
             FileWriter writer = new FileWriter(targetFile)){

            while (true){
                String line =  bReader.readLine();
                if (line == null) {
                    break;
                } else{
                    writer.write(line + "\n");
                }
            }

            System.out.println("File Copied!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以下是错误:

java.io.FileNotFoundException: files/loremipsum.txt (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at com.example.java.Main.main(Main.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

进程以退出代码 0 结束

【问题讨论】:

  • 这意味着文件files/loremipsum.txt不存在
  • 但它在目录中? .... java 在哪里寻找?我什至用 Main.java 目录中的文本文件创建了一个名为 files 的文件夹,但也没有用
  • 最近java变了吗?现在在try 语句之后将代码放在括号中是否合法?这段代码如何编译?
  • 您可以尝试new File("/files/loremipsum.txt").getAbsolutePath();获取完整路径
  • @DroidGamer 您运行程序时的当前工作目录是什么?它可能不是你想象的那样。

标签: java filereader


【解决方案1】:

如果你把它放在定义文件位置的变量之上:

File here = new File(".");
System.out.println(here.getAbsolutePath());

您会看到 Java 正在您项目的根目录中查找文件,而 不是srcout 中的任何位置。

因此,您的项目目录树应如下所示(假设为 IntelliJ):

ProjectName/  
    .idea/
    files/
        loremipsum.txt
        target.txt
    out/
        production/
            ProjectName/
                package.name/
                     Main.class
    src/
        package.name/
                Main.java
    ProjectName.iml

【讨论】:

  • 从JVM的角度来看,本质上是这样;没有找到文件;你的文件放错地方了! youtu.be/Pk-B0s0jOwE?t=2m20s
  • 感谢大家的帮助!发生的事情是我在创建项目时将示例代码导入了一个过高的目录。
  • 请输入您的解决方案作为您自己的答案,并在 48 小时内接受您的答案(或接受我的答案 Reference to answering own question
猜你喜欢
  • 2011-08-15
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多