【问题标题】:Writing ArrayList to a file in a Web Service将 ArrayList 写入 Web 服务中的文件
【发布时间】:2013-04-17 15:48:02
【问题描述】:

我想写一个ArrayList文件data.txt我的代码:

try{
    File destination = new File("data.txt");
    ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(destination));  
    os.writeObject(userList);
    os.close();
} catch....

这不会引发任何异常,只是什么都没有。代码运行正常。此代码是否不适用于 Web 服务? (REST @ Jersey,很确定与它无关)

【问题讨论】:

  • 什么是arrayList文件?你的意思是 .txt 文件,我猜。对于 .txt 文件,为了您的安全,最好使用 try/catch 进行封装
  • 尝试和缓存都在,data.txt是文件,userList是数组List。
  • @smttsp Abobe 请阅读。 tnx.

标签: java web-services web-applications file-io jersey


【解决方案1】:

这里是更新的代码:

FileOutputStream userfile = new FileOutputStream("C:\\user.dat");
ObjectOutputStream userstream = new ObjectOutputStream(userfile);
userstream.writeObject(userList);
userstream.close();

请注意“C:\data.dat”代码无法仅使用 data.dat 运行(在源文件夹上没有创建可见的文件。

输入代码如下:

ArrayList<User> dataList; // ** User is a custom Class
....
FileInputStream userfile = new FileInputStream("C:\\user.dat");
ObjectInputStream usersteam = new ObjectInputStream(userfile);
dataList = (ArrayList<User>)usersteam.readObject();
usersteam.close();

【讨论】:

    【解决方案2】:

    使用文件上传 servlet 而不是 JAX-RS 端点。从长远来看,它更容易。关于从数组列表写入文件,此代码会将其写入文件并检查文件是否已上传。

    private List<File> files=new ArrayList<File>();
      private String filename="yourfilename.dat"
    
         private boolean fileHasAlreadyBeenUploaded() throws IOException, ClassNotFoundException {
    
        boolean hasFileAlreadyBeenUploaded=false;
        File currentfile=new File(fileName);
        if(!currentfile.exists()){
            currentfile.createNewFile();
            ObjectOutputStream output 
            = new ObjectOutputStream(
                  new FileOutputStream(currentfile));
            files.add(currentFile);
            output.writeObject(currentFile);
            output.close();
            hasFileAlreadyBeenUploaded=false;
        }
        else{
             ObjectInputStream input 
                = new ObjectInputStream(
                      new FileInputStream(currentfile));
    
             files = (List<File>) (input.readObject());
             input.close();
            for(int i=0;i<files.size();i++){
                if(FileUtils.contentEquals(files.get(i), currentfile)){
                    hasFileAlreadyBeenUploaded=true;
                }   
            }
            if(!hasFileAlreadyBeenUploaded){
                ObjectOutputStream output 
                = new ObjectOutputStream(
                      new FileOutputStream(fileName));
                files.add(currentfile);
                output.writeObject(currentfile);
                output.close();
            }
        }
        return hasFileAlreadyBeenUploaded;
    
    }
    

    然后你可以用它做任何你想做的事情。对于您的 Web 服务,您最好使用 JAX-RS 端点的 Fileupload servlet。注释 @Webservlet 将为您提供该端点

    请查看以下链接以获取该示例 File upload servlet java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多