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

在java中获取文本文件的内容?,java,file-io,text-files,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.

我有一个简单的问题。 我用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[]={“供应商公司:”、“供应商名称:”、“供应商地址:”,
“供应商电话号码:”};
字符串数组4[]=i.viewSuppliers();//类的对象
如果(i.viewSuppliers()==null)
System.out.println(“无当前供应商”);
其他的
{
System.out.println(“当前供应商:”);
对于(int u=0;u

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

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

而不是返回由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;
}
公共静态列表视图供应商()
{
列表行=新的ArrayList();
扫描器x=null;
试一试{
x=新扫描仪(新文件(“C:\\Users\\فامة\\Downloads\\suppliers.txt”);
while(x.hasNext())
{
字符串a=x.next();
字符串b=x.next();
字符串c=x.next();
字符串d=x.next();
字符串数组[]={a,b,c,d};
行。添加(数组);
}
x、 close();
}
捕获(例外e)
{
e、 printStackTrace();
}
回流线;
}
然后,对结果进行迭代:

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]);
        }
    }
}
List List=i.viewSuppliers();//类的对象
if(list.isEmpty())
System.out.println(“无当前供应商”);
其他的
{
System.out.println(“当前供应商:”);
对于(字符串[]供应商:列表){
对于(int u=0;u
循环中的输出基于阵列3的长度,而不是阵列4,因此由于阵列3的长度,它将始终只打印第一个供应商

    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(“当前供应商:”);
对于(int u=0;u

可能是将System.out.println(array4)添加到一个循环中,该循环的长度低于第一个循环。

您在第一次迭代结束时返回数组,这导致它只处理第一个循环。是的,我尝试了这个方法,但问题是数组从while循环中获取参数,当返回到外部时,它向我显示未声明数组。