读取文本文件始终返回0 - Java

时间:2015-06-17 01:55:36

标签: java int

我试图读取文本文件以获取版本号但由于某种原因,无论我在文本文件中放置什么,它总是返回0(零)。

文本文件名为version.txt,它不包含空格或字母,只包含1个字符作为数字。我需要它来返回那个号码。关于为什么这不起作用的任何想法?

static int i;
public static void main(String[] args) {
    String strFilePath = "/version.txt";
    try
    {
      FileInputStream fin = new FileInputStream(strFilePath);
      DataInputStream din = new DataInputStream(fin);
      i = din.readInt();
      System.out.println("int : " + i);
      din.close();
    }
    catch(FileNotFoundException fe)
    {
       System.out.println("FileNotFoundException : " + fe);
    }
    catch(IOException ioe)
    {
       System.out.println("IOException : " + ioe);
    }
}

    private final int VERSION = i; 

2 个答案:

答案 0 :(得分:0)

请不要使用DataInputStream

根据链接的Javadoc,允许应用程序以与机器无关的方式从底层输入流中读取原始Java数据类型。应用程序使用数据输出流来写入数据,以后可以由数据输入流读取。

您想要读取File(不是数据输出流中的数据)。

请使用try-with-resources

既然你似乎想要一个ascii整数,我建议你使用Scanner

public static void main(String[] args) {
    String strFilePath = "/version.txt";
    File f = new File(strFilePath);
    try (Scanner scanner = new Scanner(f)) {
        int i = scanner.nextInt();
        System.out.println(i);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

使用初始化块

初始化块将被复制到类构造函数中,在您的示例中删除public static void main(String[] args),类似

private int VERSION = -1; // <-- no more zero! 
{
    String strFilePath = "/version.txt";
    File f = new File(strFilePath);
    try (Scanner scanner = new Scanner(f)) {
        VERSION = scanner.nextInt(); // <-- hope it's a value
        System.out.println("Version = " + VERSION);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

将其解压缩为方法

private final int VERSION = getVersion("/version.txt");
private static final int getVersion(String strFilePath) {
    File f = new File(strFilePath);
    try (Scanner scanner = new Scanner(f)) {
        VERSION = scanner.nextInt(); // <-- hope it's a value
        System.out.println("Version = " + VERSION);
        return VERSION;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return -1;
}

甚至

private final int VERSION = getVersion("/version.txt");
private static final int getVersion(String strFilePath) {
    File f = new File(strFilePath);
    try (Scanner scanner = new Scanner(f)) {
        if (scanner.hasNextInt()) {
            return scanner.nextInt();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return -1;
}

答案 1 :(得分:0)

这是我在需要阅读文本文件时使用的默认解决方案。

public static ArrayList<String> readData(String fileName) throws Exception
{
    ArrayList<String> data = new ArrayList<String>();
    BufferedReader in = new BufferedReader(new FileReader(fileName));

    String temp = in.readLine(); 
    while (temp != null)
    {
        data.add(temp);
        temp = in.readLine();
    }
    in.close();
    return data;
}

将文件名传递给readData方法。然后你可以使用for循环来读取arraylist中的唯一一行,并且可以使用相同的循环从不同的文件中读取多行...我的意思是用arraylist做你喜欢的任何事情。