Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从文件读取到数组中,然后将数据输出到另一个文件中_Java_Arrays_File_Printwriter - Fatal编程技术网

Java 将数据从文件读取到数组中,然后将数据输出到另一个文件中

Java 将数据从文件读取到数组中,然后将数据输出到另一个文件中,java,arrays,file,printwriter,Java,Arrays,File,Printwriter,需要一些帮助来解决这个问题。 我想将data.txt中的数据输入bsorted.txt,并使用bubbleSort对其进行排序 我需要将随机数字和字母生成到数据文件中,然后将它们读入数组,并在排序后将这些数据输出到另一个文本文件中 我收到一个非接触式异常: Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source)

需要一些帮助来解决这个问题。 我想将data.txt中的数据输入bsorted.txt,并使用bubbleSort对其进行排序

我需要将随机数字和字母生成到数据文件中,然后将它们读入数组,并在排序后将这些数据输出到另一个文本文件中

我收到一个
非接触式异常

Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Unknown Source) at SortingExample.main(SortingExample.java:257)
代码:

class dataFile {

public static void dataFile() {
    try {
        PrintWriter writer = new PrintWriter("data.txt");
        String alphaNumerics = "qwertyuiopasdfghjklzxcvbnm1234567890";
        String t = "";
    for (int i = 0; i < 2000; i++) {
        t += alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
    }
        writer.println(t);
        writer.close();
    }
    catch(Exception ex) {
        System.out.println("Error accessing file.");
        System.out.println("Reason was: "+ex.getMessage());
        ex.printStackTrace();
    }
  }
}

class SortingExample {

public static void main(String[] args) throws IOException { 
    dataFile.dataFile();

    Scanner bscan = new Scanner(new File("data.txt"));
    PrintWriter bsorted = new PrintWriter("bsorted.txt");
    StringType[] strings = new StringType[2000];
    for (int i = 0; i < strings.length; i++){
        strings[i] = new StringType(bscan.nextLine());
    }

    Sort.bubbleSort(strings);
    bsorted.println("Bubble Sort number of comparisons: " + Sort.bubbleComp + "\r\n" + "Bubble Sort number of exchanges: " + Sort.bubbleEx + "\r\n");
    for (int i = 0; i < strings.length; i++) {
        bsorted.println(strings[i].toString());
    }
    bsorted.close();
   }
}
类数据文件{
公共静态void数据文件(){
试一试{
PrintWriter=新的PrintWriter(“data.txt”);
字符串alphaNumerics=“QWERTYUIOPASDFHJKLZXCVBNM1234567890”;
字符串t=“”;
对于(int i=0;i<2000;i++){
t+=alphaNumerics.charAt((int)(Math.random()*alphaNumerics.length());
}
作者:println(t);
writer.close();
}
捕获(例外情况除外){
System.out.println(“访问文件时出错”);
System.out.println(“原因是:+ex.getMessage());
例如printStackTrace();
}
}
}
类排序示例{
公共静态void main(字符串[]args)引发IOException{
dataFile.dataFile();
Scanner bscan=新扫描仪(新文件(“data.txt”);
PrintWriter bsorted=新的PrintWriter(“bsorted.txt”);
StringType[]strings=新StringType[2000];
for(int i=0;i

作为任何人,有什么想法可以帮助我吗?

在继续阅读扫描仪的下一行之前,您需要检查
Scanner.hasNextLine()
是否正确。这将帮助您确定是否已安全到达文件结尾标记

因此,循环的
将是:

for (int i = 0; i < strings.length; i++) {
    if (bscan.hasNextLine())
        strings[i] = new StringType(bscan.nextLine());
}

在我看来,循环的次数比文件中的行多

您的data.txt文件中可能只有不到2000行,但是for循环仍然尝试运行大约2000次,每次都从该文件中读取另一行

我建议您计算data.txt中有多少行,并多次遍历for循环

请尝试以下代码以确定行数:

LineNumberReader lnr=newlinenumberreader(新文件读取器(新文件(“data.txt”))

lnr.skip(长最大值)

然后,您所要做的就是遍历循环
lnr.getLineNumber()
次。

根据您的代码:

for (int i = 0; i < 2000; i++) {
    t += alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
}
    writer.println(t);
    writer.close();
for(int i=0;i<2000;i++){
t+=alphaNumerics.charAt((int)(Math.random()*alphaNumerics.length());
}
作者:println(t);
writer.close();
看起来您将所有内容都附加到一个字符串中,并将其作为一个大行写出一次。换句话说,将2000个元素连接到一个字符串中

您的扫描仪正在查找2000行,因此当它只看到一行时失败

我的建议是写下以下几行:

for (int i = 0; i < 2000; i++) {
    t = alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
    writer.println(t);
}

writer.close();
for(int i=0;i<2000;i++){
t=alphaNumerics.charAt((int)(Math.random()*alphaNumerics.length());
作者:println(t);
}
writer.close();

离题,但有许多约定让我从OO的角度暂停,例如小写类名(数据文件),一个不象动词的方法名(数据文件)

也发布您的异常,它将为人们提供一个很好的开始帮助您的地方。实际上我做了编辑,我想我必须删除data.txt才能刷新它。我修正了一些事情,现在data.txt中的数据由于某种原因已经被排序了。
for (int i = 0; i < 2000; i++) {
    t = alphaNumerics.charAt((int) (Math.random() * alphaNumerics.length()));
    writer.println(t);
}

writer.close();