Java 在try-catch块中访问和运行代码时出现问题

Java 在try-catch块中访问和运行代码时出现问题,java,methods,try-catch,Java,Methods,Try Catch,出于某种原因,我的程序不会写入文件,即使我能够使try-catch块无错误并运行。我无法访问try块并创建此文件的原因是什么 public static void main(String[] args) { BufferedReader crunchifyBuffer = null; try { String crunchifyLine; crunchifyBuffer = new BufferedReader(new FileReader

出于某种原因,我的程序不会写入文件,即使我能够使try-catch块无错误并运行。我无法访问try块并创建此文件的原因是什么

    public static void main(String[] args) {
    BufferedReader crunchifyBuffer = null;
    try {
        String crunchifyLine;
        crunchifyBuffer = new BufferedReader(new FileReader("/Users/moo/Desktop/test.csv"));
        // How to read file in java line by line?
        while ((crunchifyLine = crunchifyBuffer.readLine()) != null) {
            ArrayList<String> parsedData = new ArrayList<String>();
            parsedData.add(crunchifyCSVtoArrayList(crunchifyLine).get(0));
            parsedData.add(crunchifyCSVtoArrayList(crunchifyLine).get(7));
            parsedData.add(crunchifyCSVtoArrayList(crunchifyLine).get(8));
            System.out.println("\n"+ parsedData + "\n");
            String ID = parsedData.get(0);
            String[] aVPayload = new String[3];
            aVPayload[0] = ID;
            String holder = sdkCall(aVPayload);
            try {
                JSONObject jsonObj = new JSONObject(holder);

                String Lat = jsonObj.getJSONObject("geo").getString("latitude");
                String Long = jsonObj.getJSONObject("geo").getString("longitude");


                try {
                    PrintWriter writer = new PrintWriter("addressValidityReport.txt", "UTF-8");
                    writer.println("ID" + "\t" + "CSV Lat" + "\t" + "CSV Long" + "\t" + "Lat" + "\t" + "Long" + "\t" + "Status" );
                    while ((crunchifyLine = crunchifyBuffer.readLine()) != null) {
                        writer.println((crunchifyCSVtoArrayList(crunchifyLine).get(0)) + "\t" + (crunchifyCSVtoArrayList(crunchifyLine).get(7)) + "\t" + (crunchifyCSVtoArrayList(crunchifyLine).get(8)) + "\t" + Lat + "\t" + Long + "\t" + "FLAGGED" + "\n");
                    }
                    writer.close();
                } catch (IOException e) {
                    System.out.println("ERROR, CHECK FILE PRINTING!");
                }

            } catch (JSONException e) {
                System.out.println("unexpected JSON exception");
            }


        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {

            if (crunchifyBuffer != null) crunchifyBuffer.close();
        } catch (IOException crunchifyException) {
            crunchifyException.printStackTrace();
        }
    }
}
publicstaticvoidmain(字符串[]args){
BufferedReader crunchifyBuffer=null;
试一试{
弦线;
crunchifyBuffer=newbufferedreader(newfilereader(“/Users/moo/Desktop/test.csv”);
//如何逐行读取java中的文件?
而((crunchifyLine=crunchifyBuffer.readLine())!=null){
ArrayList parsedData=新的ArrayList();
add(crunchifycsvtoarray列表(crunchifyLine.get)(0));
add(crunchifycsvtoarray列表(crunchifyLine.get)(7));
add(crunchifycsvtoarray列表(crunchifyLine.get)(8));
System.out.println(“\n”+parsedData+”\n”);
String ID=parsedData.get(0);
字符串[]aVPayload=新字符串[3];
aVPayload[0]=ID;
管柱支架=sdkCall(平均有效载荷);
试一试{
JSONObject jsonObj=新的JSONObject(持有者);
String Lat=jsonObj.getJSONObject(“地理”).getString(“纬度”);
String Long=jsonObj.getJSONObject(“地理”).getString(“经度”);
试一试{
PrintWriter writer=新的PrintWriter(“addressValidityReport.txt”、“UTF-8”);
println(“ID“+”\t“+”CSV Lat“+”\t“+”CSV Long“+”\t“+”Lat“+”\t“+”Long“+”\t“+”状态”);
而((crunchifyLine=crunchifyBuffer.readLine())!=null){
writer.println((crunchifyCSVtoArrayList(crunchifyLine).get(0))+“\t”+(crunchifyCSVtoArrayList(crunchifyLine).get(7))+“\t”+(crunchifyCSVtoArrayList(crunchifyLine).get(8))+“\t”+Lat+“\t”+Long+“\t”+“标记”+“\n”);
}
writer.close();
}捕获(IOE异常){
System.out.println(“错误,检查文件打印!”);
}
}捕获(JSONException e){
System.out.println(“意外的JSON异常”);
}
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
if(crunchifyBuffer!=null)crunchifyBuffer.close();
}捕获(IOException-crunchifyException){
crunchifyException.printStackTrace();
}
}
}

它会运行,但不会创建任何文件。有两个catch异常会导致这种情况吗?

您需要在close()之前创建一个writer.flush(),强制将数据写入文件

PrintWriter(文件,字符串csn) 使用指定的文件和字符集创建一个新的PrintWriter,而不使用自动换行


在检查printl()方法之后,我认为它不会刷新()并且您可能正在丢失数据,这就是为什么您的文件结尾没有出现异常的原因

如果没有抛出异常,那么您的CSV文件是否为空?不,它已填充,当我使包含PrintWriter的try-catch部分独立时,它将创建文件,但随后将无法访问“Lat”“Long”字符串变量,并且我必须将它们设为null。您是否尝试使用调试器单步执行代码?这将使您能够准确地看到在代码中的每个点上它设置的每个变量。除非您被限制为Java 7之前的版本,否则您应该使用try with resources来确保您的编写器和读取器正确关闭。是的,我已经完成了调试器,我对代码的结构做了一些更改,但它没有正确运行似乎仍然很奇怪。