当前位置: 首页 > 知识库问答 >
问题:

无法从文件读取数据

戚建华
2023-03-14

我正在尝试从com包中的CSV文件中读取值。实例但当我使用以下语法运行代码时:

DataModel model = new FileDataModel(new File("Dataset.csv"));

上面写着:

java.io.FileNotFoundException: Dataset.csv

我也尝试过使用:

DataModel model = new FileDataModel(new File("/com/example/Dataset.csv"));

仍然不工作。任何帮助都会很有帮助。谢谢

共有3个答案

荣曾笑
2023-03-14

包com中存在的CSV文件。实例

您可以使用getResource()getResourceAsStream()从包中访问资源。例如

InputStream is = getClass().getResourceAsStream("/com/example/Dataset.csv");//uses absolute (package root) path
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//read from BufferedReader

(为简洁起见,上面省略了异常处理和文件关闭)

王轶
2023-03-14
public class ReadCVS {

  public static void main(String[] args) {

    ReadCVS obj = new ReadCVS();
    obj.run();

  }

  public void run() {

    String csvFile = "file path of csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

                // Do stuff here

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    System.out.println("Done");
  }

}
诸新霁
2023-03-14

如果这是org.apache.mahout.cf.taste.impl.model.file中的FileDataModel,那么它不能接受输入流,只需要一个文件。问题是您不能假设该文件对您来说那么容易(请参阅此问题的答案)。

最好读取文件的内容并将其保存到临时文件,然后将该临时文件传递给FileDataModel

InputStream initStream = getClass().getClasLoader().getResourceAsStream("Dataset.csv");
//simplistic approach is to put all the contents of the file stream into memory at once
//  but it would be smarter to buffer and do it in chunks
byte[] buffer = new byte[initStream.available()];
initStream.read(buffer);

//now save the file contents in memory to a temporary file on the disk
//choose your own temporary location - this one is typical for linux
String tempFilePath = "/tmp/Dataset.csv";  
File tempFile = new File(tempFilePath);
OutputStream outStream = new FileOutputStream(tempFile);
outStream.write(buffer);

DataModel model = new FileDataModel(new File(tempFilePath));
...
 类似资料:
  • 问题内容: 我在做一些真正愚蠢的事情时遇到了一个大问题。也就是说,打开流到我的META-INF文件夹中的资源文件。我正在使用jar工具并执行以下操作: 我只是一个空!该项目是使用maven构建的,xsd文件最终位于META-INF文件夹中,但仍然无法使用。 我不理解的是背后的理论?ClassLoader如何在文件系统中执行查找?如何获得文件? 问题答案: 尝试删除第一个斜杠: 如果要在对象上调用方

  • 我正在运行此命令以从普通群集(未安装hadoop)中读取 Azure 数据砖中的数据。 我得到了这个错误 你能建议我需要安装什么样的jar来让它工作吗

  • 问题内容: 我正在通过https://www.digitalocean.com/community/tutorials/how-to-serv-django- applications-with-uwsgi-and-nginx-on- ubuntu-16-04进行 工作。我已经完成测试,但出现502错误。 我的nginx服务器块配置文件: nginx错误日志显示: 在我看来,uwsgi运行正常:

  • 问题内容: 我想读取.bak文件,这些文件是ms sql数据库的备份文件。现在,我正在研究如何使用Sql Mngmnt studio读取这些文件。请帮帮我。谢谢 问题答案: 您可以使用SQL Management Studio将.BAK文件还原到临时数据库并读取它们! 这里的一些指针

  • 我有一个3节点的Apache Ignite集群,我创建了一个以整数为键的缓存,以'subscriber'POJO为值,当我从JAVA程序内部连接到集群并访问缓存时,我得到了上面提到的异常,我有'peerClassLoading'属性设置为false,并且我在所有节点中部署了'subscriber'POJO二进制文件,请在下面找到完整的堆栈跟踪。我错过了什么?当我在JAVA程序中用启动客户端时,它为

  • 我很难弄清楚这个问题,我几乎什么都试过了。 我希望我的程序从Jar文件中读取两个资源,并且它将在eclipse中运行良好。但是当我从命令提示符运行jar时,它会给出空指针异常。 结构: src/main/java/App。JAVA src/main/resources/properties/application。属性 src/main/resources/spring/applicationCo