在java中获取文本文件的内容?

时间:2015-11-02 20:09:40

标签: java file-io text-files

我有一个简单的问题。 我在java中编写了一个方法来获取文本文件的内容。

public static String[] viewSuppliers()
{
    Scanner x = null;
    try{
        x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\suppliers.txt"));
        while(x.hasNext())
        {
            String a = x.next();
            String b = x.next();
            String c = x.next();
            String d = x.next();
            String array[] = {a,b,c,d};
            return array;
        }
        x.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return null;
}

我在主程序中调用了此方法,但它只返回文件的一行。我的文本文件的内容是这样的:

PEPSI John London 214222
COLA Sarah France 478800

这是我的主要计划:

String array3[] = {"Supplier Company: ", "Supplier Name: ", "Supplier Address: ", 
    "Supplier Phone Number: "};
String array4[] = i.viewSuppliers(); // object of class
if(i.viewSuppliers() == null)
    System.out.println("No current suppliers.");
else
{
    System.out.println("Current Suppliers: ");
    for(int u = 0; u < array3.length; u++)
    {
        System.out.printf(array3[u]);
        System.out.println(array4[u]);
    }
}

当我运行主程序并调用方法时,它只返回第一行,我想返回所有文件。

3 个答案:

答案 0 :(得分:2)

而不是返回4个字符串的数组, 看起来你真正想要的是返回一个包含4个字符串的数组列表:

public static List<String[]> viewSuppliers()
{
    List<String[]> lines = new ArrayList<>();
    Scanner x = null;
    try{
        x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\suppliers.txt"));
        while(x.hasNext())
        {
            String a = x.next();
            String b = x.next();
            String c = x.next();
            String d = x.next();
            String array[] = {a,b,c,d};
            lines.add(array);
        }
        x.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return lines;
}

然后,迭代结果:

List<String[]> list = i.viewSuppliers(); // object of class
if (list.isEmpty())
    System.out.println("No current suppliers.");
else
{
    System.out.println("Current Suppliers: ");
    for (String[] supplier : list) {
        for(int u = 0; u < array3.length; u++)
        {
            System.out.printf(array3[u]);
            System.out.println(supplier[u]);
        }
    }
}

答案 1 :(得分:0)

尝试从while循环中返回,否则在第一次迭代后返回。

答案 2 :(得分:0)

您在循环上输出的数据基于array3的长度,但不是array4,所以由于array3的长度,它总是只打印第一个供应商。

    System.out.println("Current Suppliers: ");
for(int u = 0; u < array3.length; u++)
{
    System.out.printf(array3[u]);
    System.out.println(array4[u]);
}

可能会根据第一个循环下面的长度将System.out.println(array4)添加到循环中。