读取和返回多个bin文件

时间:2012-02-29 10:31:39

标签: java

    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;
}

2 个答案:

答案 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]);
}