Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建csv会导致崩溃_Java_Android - Fatal编程技术网

Java 创建csv会导致崩溃

Java 创建csv会导致崩溃,java,android,Java,Android,因此,我试图让我的android应用程序创建一个CSV文件,但它似乎不起作用,并且崩溃了。我已经测试了我的其余代码,它工作正常,但这似乎太容易导致崩溃:/csv文件在我手机的根目录上是空的 更新了我的日志 我的代码: FileWriter writefile; File root = Environment.getExternalStorageDirectory(); File MesurementFile= new File(root, "Data.csv"); Calendar c = Ca

因此,我试图让我的android应用程序创建一个CSV文件,但它似乎不起作用,并且崩溃了。我已经测试了我的其余代码,它工作正常,但这似乎太容易导致崩溃:/csv文件在我手机的根目录上是空的

更新了我的日志 我的代码:

FileWriter writefile;
File root = Environment.getExternalStorageDirectory();
File MesurementFile= new File(root, "Data.csv");
Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = df.format(c.getTime());
String date = "Current date";
String a= "a size : ";
String b="b Size : ";

public void writeCsvHeader() throws IOException {
    String line = String.format("%s,%s,%s\n",date,a,b);
    writer = new FileWriter(csvfile);
    writer.write(line);
}

public void writeCsvData(long a, long b)throws IOException {
    String line = String.format("%f,%f,%f,%f\n", formattedDate ,a,b);
    writer.write(line);
    try {

        writer = new FileWriter(MesurementFile);
        writeCsvData(a,b);

    } catch (IOException e) {
        e.printStackTrace();
    }
}}
堆栈跟踪:

07-25 14:07:54.874: E/AndroidRuntime(9482): FATAL EXCEPTION: main
07-25 14:07:54.874: E/AndroidRuntime(9482): Process: com.extras, PID: 9482
07-25 14:07:54.874: E/AndroidRuntime(9482): java.lang.RuntimeException: Unable to start service com.extras.MyService@41e9c500 with Intent { cmp=com.extras/.MyService (has extras) }: java.util.IllegalFormatConversionException: %f can't format java.lang.String arguments
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2737)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.app.ActivityThread.access$2100(ActivityThread.java:144)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.os.Looper.loop(Looper.java:136)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.app.ActivityThread.main(ActivityThread.java:5140)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.lang.reflect.Method.invokeNative(Native Method)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.lang.reflect.Method.invoke(Method.java:515)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at dalvik.system.NativeStart.main(Native Method)
07-25 14:07:54.874: E/AndroidRuntime(9482): Caused by: java.util.IllegalFormatConversionException: %f can't format java.lang.String arguments
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.util.Formatter.badArgumentType(Formatter.java:1489)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.util.Formatter.transformFromFloat(Formatter.java:2038)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.util.Formatter.transform(Formatter.java:1465)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.util.Formatter.doFormat(Formatter.java:1081)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.util.Formatter.format(Formatter.java:1042)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.util.Formatter.format(Formatter.java:1011)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.lang.String.format(String.java:1999)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at java.lang.String.format(String.java:1973)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at com.extras.MyService.writeCsvData(MyService.java:83)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at com.extras.MyService.onStartCommand(MyService.java:46)
07-25 14:07:54.874: E/AndroidRuntime(9482):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2720)
07-25 14:07:54.874: E/AndroidRuntime(9482):     ... 10 more





 07-25 14:24:25.994: E/AndroidRuntime(13219): FATAL EXCEPTION: main
    07-25 14:24:25.994: E/AndroidRuntime(13219): Process: com.extras, PID: 13219
    07-25 14:24:25.994: E/AndroidRuntime(13219): java.lang.StackOverflowError
    07-25 14:24:25.994: E/AndroidRuntime(13219):    at     java.lang.Thread.currentThread(Thread.java:470)
    07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.lang.ThreadLocal.get(ThreadLocal.java:53)
    07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.util.Formatter.getDecimalFormat(Formatter.java:594)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at     java.util.Formatter.transformF(Formatter.java:2215)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.util.Formatter.transformFromFloat(Formatter.java:2055)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.util.Formatter.transform(Formatter.java:1465)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.util.Formatter.doFormat(Formatter.java:1081)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.util.Formatter.format(Formatter.java:1042)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.util.Formatter.format(Formatter.java:1011)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.lang.String.format(String.java:1999)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at java.lang.String.format(String.java:1973)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:83)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writeCsvData(MyService.java:88)
07-25 14:24:25.994: E/AndroidRuntime(13219):    at com.extras.MyService.writ

您正在使用%f格式化字符串,因此它正在抱怨。还有四个%f,您正在传递三个值(formattedDate、a、b)

%f无法格式化java.lang.String参数

这基本上说明了你需要的一切。您试图写入一个字符串,但占位符只接受
%f
,即
float
(如果我没有记错的话)

因此,只需检查此处的参数类型,并将
%f
更改为
%s
或更改参数类型即可

// at least one %f is wrong here...
String line = String.format("%f,%f,%f,%f\n", formattedDate ,a,b);
更新:

您现在看到一个
StackOverflowException
,因为您在同一个方法中调用了自己的方法。这是一个无限循环,通常称为“递归”。递归需要有一些定义良好、防弹的结束条件。堆栈大小是递归可以执行的循环的限制,您正在超过该限制

public void writeCsvData(long a, long b)throws IOException {
    String line = String.format("%f,%f,%f,%f\n", formattedDate ,a,b);
    writer.write(line);
    try {

        writer = new FileWriter(MesurementFile);
        writeCsvData(a,b); // THIS cause the loop

    } catch (IOException e) {
        e.printStackTrace();
    }
}
您需要找到一种只写一行并在循环中重复调用的方法。如何做到这一点取决于您:)

原因:
java.util.IllegalFormatConversionException:%f
无法格式化
java.lang.String
参数

我在这里看到三个问题:

  • 您正在使用
    %f
    (浮点格式),同时传递
    long
    值(无浮点)
  • 您的格式需要四个参数,您只传递三个参数
  • formattedDate
    是一个
    字符串
    ,它不是用于浮点数的
    %f的可格式化字符串

  • 请包括堆栈跟踪。无论如何,考虑使用CSV库编写CSVSI已经考虑使用OpenCsv或SuffCSV,但我宁愿尝试从零开始代码更改自己的文件(“%s,%f,%f”)没有帮助:/同样的问题,更新我的栈
    public void writeCsvData(long a, long b)throws IOException {
        String line = String.format("%f,%f,%f,%f\n", formattedDate ,a,b);
        writer.write(line);
        try {
    
            writer = new FileWriter(MesurementFile);
            writeCsvData(a,b); // THIS cause the loop
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    String line = String.format("%f,%f,%f,%f\n", formattedDate ,a,b);