private static int count = 0;
public static String[] play()throws Exception{
File file=new File("E:/proj/"+count+".bin");
FileInputStream fin=new FileInputStream("E:/proj/"+count+".bin");
//reading the byte content of the bin files
byte fileContent[] = new byte[(int)file.length()];
fin.read(fileContent);
//storing the deserialized object that is returned to an object.
Object obj=serializer.toObject(fileContent);
//converting the obtained object to string
String word=obj.toString();
String[] args=new String[]{word};
count++;
return args ;
}
这个片段实际上应该读取指定路径中存在的所有bin文件并最终将其转换为字符串并将所有byte[]
转换为字符串存储为string[]
中的不同字符串元素返回string[]
。虽然它会因为计数器而读取所有bin文件,但不知何故,它只返回它读取的第一个二进制文件的字符串。
即使是这个修改过的版本也似乎有效。我猜它会读取所有bin文件,但只返回读取的最后一个bin文件的字符串。我想要的是将所有字符串元素存储到string[]
并将string[]
返回给另一个调用函数。
public static String[] play(){
int i = 1;
String[] args=null;;
String result = null;
while (true) {
try {
result += processFile(i++);
args=new String[]{result};
}
catch (Exception e) {
System.out.println("No more files");
break;
}
}
return args;
}
private static String processFile(int fileNumber) throws Exception {
File file=new File("E:/proj/"+fileNumber+".bin");
FileInputStream fin=new FileInputStream("E:/proj/"+fileNumber+".bin");
//reading the byte content of the bin files
byte fileContent[] = new byte[(int)file.length()];
fin.read(fileContent);
//storing the deserialized object that is returned, to an object.
Object obj=serializer.toObject(fileContent);
//converting the obtained object to string
String word=obj.toString();
return word;
}
答案 0 :(得分:0)
如果我清楚地了解您的要求,您可以尝试以这种方式更改您的代码:
List<String> args = new ArrayList<String>();
while (true) {
try {
args.add(processFile(i++));
}
catch (Exception e) {
// your code
}
}
String[] array = args.toArray(new String[0]);
答案 1 :(得分:0)
您刚发布的代码中存在以下几个问题: - 结果初始化为null,因此您的代码将在第一个循环中抛出NPE。 - 假设你正确初始化它(在你的情况下为“”),args会在每个循环中重新分配给一个新数组,这样你就会丢失从前一个循环中得到的信息。
如果您希望play()
方法返回一个数组,其中数组中的每个项目都是一个文件的内容,这应该有效。如果你想要不同的东西,你需要更清楚地解释你的要求。
public static String[] play() {
int i = 1;
List<String> files = new ArrayList<String>();
while (true) {
try {
files.add(processFile(i++));
} catch (Exception e) {
System.out.println("No more files");
break;
}
}
return files.toArray(new String[0]);
}