2017-06-02 151 views
-2

我写了一个java代码打印我的输出在位于文档,但执行的代码文件后,文件仍然是empty.Can有人让我犯错误正在使用NetBeans创建此程序如何使用java获取输出到文件?

代码

import java.net.HttpURLConnection; 
import java.net.URL; 
import java.lang.*; 
import java.io.*; 

public class NewClass1 { 

    static long start = 0; 
    static long finish = 0; 
    static long time; 

    public static void main(String[] args) throws Exception { 

     BufferedWriter bw = null; 
     FileWriter fw = null; 
     for (int i = 0; i <= 5; i++) { 

      String stack_url = "https://www.google.lk/"; 

      try { 
       URL url = new URL(stack_url); 
       HttpURLConnection httpUrlConnect = (HttpURLConnection) url.openConnection(); 
       httpUrlConnect.setConnectTimeout(10); 
       start = System.currentTimeMillis(); 
       httpUrlConnect.connect(); 

       if (httpUrlConnect.getResponseCode() == 200) { 
        finish = System.currentTimeMillis(); 
        System.out.println(stack_url + " - " + httpUrlConnect.getResponseMessage() + " took " + (finish - start) + " Milli Seconds."); 
       } 

       if (httpUrlConnect.getResponseCode() == httpUrlConnect.HTTP_NOT_FOUND) { 
        System.out.println(stack_url + " - " + httpUrlConnect.getResponseMessage() + " - " + httpUrlConnect.HTTP_NOT_FOUND); 
       } 
      } catch (Exception e) { 

      } 

      time = finish - start; 
      finish = System.currentTimeMillis(); 
      System.out.println("Total Time for page load - " + (finish - start)); 

      try { 

       Integer _time = (int) (long) time; 
       String content = Integer.toString(_time); 
       fw = new FileWriter("time.sql"); 
       bw = new BufferedWriter(fw); 
       bw.write(content); 

       System.out.println("Done"); 

      } catch (IOException e) { 

       e.printStackTrace(); 

      } finally { 

       try { 

        if (bw != null) { 
         bw.close(); 
        } 

        if (fw != null) { 
         fw.close(); 
        } 

       } catch (IOException ex) { 

        ex.printStackTrace(); 

       } 
      } 
     } 

     Thread.sleep(1000); 
    } 
} 
+3

** **从不} write'赶上(例外五){ }'。始终处理异常。 atleast logg stacktrace – Jens

+0

我想你会得到一个异常。通过阅读一个URL。在这种情况下,将创建一个空文件 – Jens

+1

此外,你创建一个循环中的文件,所以在每次执行该文件将被覆盖 – Jens

回答

-1

您应该使用EDITED尝试,与资源,如:

try (FileWriter fw = new FileWriter("D:\\time.sql")) 

作为你的主要方法的第一行,并在你终于阻止,你可以删除fw.close() 调用。

如果您希望可以直接使用fw.write(content);而不是缓冲写入器。

你可以摆脱下面的代码(如您的循环,每次一个新对象构造不要求),如果您使用的资源的尝试:

fw = new FileWriter("time.sql"); 
bw = new BufferedWriter(fw); 
bw.write(content); 

,而使用:

fw.write(content); 

我确实进行了上述修改,它适用于我。

HTH, AJ

1

第一件事:

你的程序不花全部时间如此相反,你必须增加时间执行:

httpUrlConnect.setConnectTimeout(1000); 
//--------------------------------^^ 

第二件事:

不要创建你的代码中的文件,只需创建它之前,所以你必须移动这两个线路的外循环:

fw = new FileWriter("time.sql"); 
bw = new BufferedWriter(fw); 

第三件事:

请勿关闭你的文件在每次迭代中,当你完成时关闭它,所以你必须在你的循环之后删除finally块并关闭你的文件。

bw.close(); 
fw.close(); 

您的代码应该是这样的:

通过user1516873

@Test 
public void test44325932() { 

    final String stackUrl = "https://www.google.lk/"; 

    // BufferedWriter is closable, it will close automatically (and close underline stream) in finally block 
    try (BufferedWriter bw = new BufferedWriter(new FileWriter("time.sql"))) { 

     for (int i = 0; i <= 5; i++) { 
      String responseStatus; 
      long start = System.currentTimeMillis(); 
      long finish; 
      try { 
       URL url = new URL(stackUrl); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setConnectTimeout(5000); // 5 sec connect timeout 
       connection.connect(); 
       if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
        responseStatus = "OK"; 
       } else { // any non 200 status counts as error 
        responseStatus = connection.getResponseCode() + " : " + connection.getResponseMessage(); 
       } 
       // full time should be calculated after completely reading response, not after get status code, but it is depends of requirements 
       // I put it here as example 
       // IOUtils.readFully(connection.getInputStream(), new byte[1024]); 
       connection.disconnect(); 
      } catch (IOException e) {     
       responseStatus = "Exception : " + e.getClass().getSimpleName(); 
      } finally { 
       finish = System.currentTimeMillis(); 
      } 

      long time = finish - start; 
      System.out.println("Server response: " + time + " ms, status: " + responseStatus); 
      bw.write(String.valueOf(time)); // i think you should write status here, too. 
      bw.newLine(); 
      Thread.sleep(1000); 
     } 
     System.out.println("Done"); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
相关问题