要求:
数组从文件读取。
如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。
package test1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.math.BigInteger; import java.util.Scanner; public class test2 { public static void main(String[]args) throws IOException { Scanner in = new Scanner(System.in); String fileName = "D:\University\Sophomore Shang\专业\JAVA项目\test1\src\test1\target.txt"; File file = new File(fileName); System.out.println("文件字节大小是::"+file.length()); if(!file.exists()){ System.out.println("文件不存在!"); }else if(file.exists() && file.length() == 0) { System.out.println("文件为空!"); }else{ FileReader fileReader = new FileReader(fileName); BufferedReader bufferedReader = new BufferedReader(fileReader); String line; int i,j,flag=0; BigInteger tmp = new BigInteger("0"); BigInteger max = new BigInteger("0"); while((line=bufferedReader.readLine())!=null) { String []s = line.split(","); for(i=0;i<s.length;i++) { String k=s[i]; for(j=0;j<k.length();j++) { if(!(k.charAt(j)>='0'&&(k.charAt(j)<='9')||k.charAt(j)=='-'||k.charAt(j)==',')){ System.out.println("文件输入不合法,必须全部由数字组成,且中间分割用逗号!"); flag=1; break; } } BigInteger key = new BigInteger(k); /*if(k.charAt(i)=='-') { s[i]; continue; }*/ BigInteger cmp=new BigInteger("0"); if(key.subtract(cmp).intValue()>0) tmp = tmp.add(key); else tmp = key; if(tmp.subtract(max).intValue()>0) max=tmp; if(flag==1) break; } if(flag==1) break; } if(flag==0) System.out.println("子数组最大值为:"+max); bufferedReader.close(); fileReader.close(); } } }
ps:
1.如果File表示一个具体文件,则length方法返回这个文件的字节大小;
2.如果File表示一个目录,则length方法的返回值不确定;
3.如果File表示的目录或文件不存在,则length方法的返回值为0L
注:还有一些bug,负数无法识别,尚未更改,但可以采取每行读取的方式,再存放到数组中,但尚未完善。