Java中带有字符串缓冲区的问题

问题描述 投票:0回答:2

我有一个servlet,从InputStream中以XML格式获取表单数据。我能够获取XML格式的表单数据,并能够在文件中写入相同的数据。如果我打开文件,则可以看到我的表单数据。

现在的问题是,当我尝试将表单数据追加到字符串缓冲区时,它没有发生。我尝试了buffer.append()。使用该方法之后,当我尝试打印字符串缓冲区值时,控制台中什么都没有显示/打印。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                // TODO Auto-generated method stub
                 response.setContentType("html/text");
             PrintWriter out = response.getWriter();
             out.println("doPost Method is excecuting");
             DataInputStream in = new DataInputStream (request.getInputStream());
             StringBuffer buffer = new StringBuffer();
             File file = new File("reqOutput.txt");
             file.createNewFile();
             FileWriter writer = new FileWriter(file); 
             int value;
             while ((value=in.read()) != -1) {
                             buffer.append(value);
                        writer.write(value);
                      }
             System.out.println("Value is : "+ buffer.toString()); // Nothing is printing
             writer.flush();
             writer.close();
}

我的代码有什么问题。请提出任何建议。

java inputstream stringbuffer
2个回答
3
投票

这里您的代码已修改为从文件中读取:

    public static void main(final String[] args) throws Exception {
        BufferedReader in = null;
        try {
            in = new BufferedReader(new FileReader("test"));
            final StringBuilder sb = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                sb.append(line);
            }
            System.out.println("Value is : " + sb.toString());
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }

我在FileReader周围添加了BufferedReader以优化读取。我从一次读取一个字符切换为逐行读取。这也为您提供了String形式的结果,因此您不必转换int。

此外,我添加了资源处理(7之前的样式,没有异常处理),并切换到StringBuilder。

输出:

你好,世界! ->价值是:世界你好!

我认为还有另一个问题,不在代码的这一部分。

关于您的代码的其他注释(与问题无关):

StringBuffer是线程安全的实现。如果不需要这样做(例如在servlet示例中),则最好使用StringBuilder。

不要关闭代码块中的资源,即使在某个地方的代码块发生异常的情况下,也要尝试最终尝试(或者因为Java 7 try-with-resources,以确保总是关闭资源。


0
投票
public class MainActivity extends AppCompatActivity {
    DatabaseHelper mydb;
    private EditText E1, E2, E3;
    private Button B1, B2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mydb = new DatabaseHelper(this);

        E1 = (EditText) findViewById(R.id.t1);
        E2 = (EditText) findViewById(R.id.t2);
        E3 = (EditText) findViewById(R.id.t3);
        B1 = (Button) findViewById(R.id.B1);
        B2 = (Button) findViewById(R.id.B2);
        // Add();
    }

    public void viewAll() {
        B2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cursor res = mydb.getAllData();
                if (res.getCount() == 0) ;
                {
                    return;
                }
                StringBuffer buffer = new StringBuffer(100);
                while(res.moveToNext());
                buffer.append(("ID:"+res.getString(0))+"\n");


                buffer.append(("OwnerName:"+res.getString(1))+"\n");
                buffer.append(("EngineNo:"+res.getString(2))+"\n");
                buffer.append(("ChasisNo:"+res.getString(3))+"\n\n");
            }
        });

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.