从未知路径读取文件

时间:2016-05-09 11:12:55

标签: java file stream

以下代码从特定路径读取文本文件。

import java.io.*;
public class Game {
static FileInputStream fin = null;
static DataInputStream din = null;
static BufferedReader br = null;

public void run()
{
    fin = new FileInputStream("C:\\Users\\USER 1\\Desktop\\Project Java\\players.txt");
    din = new DataInputStream(fin);
    br = new BufferedReader(new InputStreamReader(din));
...}

我的问题是我想从任何路径读取players.txt文件,例如,如果我从另一台路径不同的机器上运行该程序。

2 个答案:

答案 0 :(得分:1)

在类路径中创建一个config.properties文件,并将该文件的路径存储在这样的变量中

pathToFile = C:\Users\USER 1\Desktop\Project Java\
nameOfFile = players.txt

然后,使用Configsupplied by Oracle创建一个Properties类并阅读属性文件。在Config类中创建上述两个变量的适当setter和getter,并像这样读取文件:

import java.io.*;
import packagename.Config;
public class Game {
    static FileInputStream fin = null;
    static DataInputStream din = null;
    static BufferedReader br = null;
    static Config config = new Config();

    public void run() {
        fin = new FileInputStream(config.getPathToFile + config.getFileName);
        din = new DataInputStream(fin);
        br = new BufferedReader(new InputStreamReader(din));
}

使用此方法,您将存储文件外部的路径,因此每次要将Java程序运行到另一台计算机时,您只需编辑{{ 1}}文件并从控制台执行config.properties代码修改。

注意

作为“最佳”做法,请避免包含随时可能更改的硬编码路径或名称(文件夹名称,数据库字段等)。作为第一条规则,总是将这些名称“聚集”在一个中心位置,在我们的例子中是一个类。通过这样做,每次名称更改时,您只需将其更改为一次,而不是在整个项目中进行搜索。

作为第二条规则,将这些名称与代码隔离开来,以便在属性文件中不执行任何代码更改时执行它,无论文件夹结构,操作系统使用等等。通过这样做,即使是不了解Java的人也是如此。或编程,可以重命名文本文件中的几个变量并运行程序。

答案 1 :(得分:0)

而不是绝对的

fin = new FileInputStream("C:\\Users\\USER 1\\Desktop\\Project Java\\players.txt");

使用相对路径,例如:

fin = new FileInputStream("../input/players.txt");