Java 创建csv会导致崩溃
因此,我试图让我的android应用程序创建一个CSV文件,但它似乎不起作用,并且崩溃了。我已经测试了我的其余代码,它工作正常,但这似乎太容易导致崩溃:/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
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);