@@ -94,10 +94,11 @@ private Value process(File file, String mode) throws IOException {
9494
9595 DataOutputStream dos = null ;
9696 BufferedWriter writer = null ;
97+ final boolean append = mode .contains ("+" );
9798 if (mode .contains ("wb" )) {
98- dos = new DataOutputStream (new FileOutputStream (file ));
99+ dos = new DataOutputStream (new FileOutputStream (file , append ));
99100 } else if (mode .contains ("w" )) {
100- writer = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (file ), "UTF-8" ));
101+ writer = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (file , append ), "UTF-8" ));
101102 }
102103
103104 final int key = files .size ();
@@ -115,7 +116,7 @@ public Value execute(Value... args) {
115116 try {
116117 return execute (files .get (key ), args );
117118 } catch (IOException ioe ) {
118- return NumberValue .ZERO ;
119+ return NumberValue .MINUS_ONE ;
119120 }
120121 }
121122
@@ -168,8 +169,6 @@ private static class rename extends FileFunction {
168169 @ Override
169170 protected Value execute (FileInfo fileInfo , Value [] args ) throws IOException {
170171 final File dest = files .get (args [1 ].asInt ()).file ;
171- System .out .println (fileInfo .file );
172- System .out .println (dest );
173172 return NumberValue .fromBoolean (fileInfo .file .renameTo (dest ));
174173 }
175174 }
@@ -367,15 +366,27 @@ protected Value execute(FileInfo fileInfo, Value[] args) throws IOException {
367366 private static class writeLong extends FileFunction {
368367 @ Override
369368 protected Value execute (FileInfo fileInfo , Value [] args ) throws IOException {
370- fileInfo .dos .writeLong ((long ) args [1 ].asNumber ());
369+ final long value ;
370+ if (args [1 ].type () == Types .NUMBER ) {
371+ value = ((NumberValue )args [1 ]).asLong ();
372+ } else {
373+ value = (long ) args [1 ].asNumber ();
374+ }
375+ fileInfo .dos .writeLong (value );
371376 return NumberValue .ONE ;
372377 }
373378 }
374379
375380 private static class writeFloat extends FileFunction {
376381 @ Override
377382 protected Value execute (FileInfo fileInfo , Value [] args ) throws IOException {
378- fileInfo .dos .writeFloat ((float ) args [1 ].asNumber ());
383+ final float value ;
384+ if (args [1 ].type () == Types .NUMBER ) {
385+ value = ((NumberValue )args [1 ]).asFloat ();
386+ } else {
387+ value = (float ) args [1 ].asNumber ();
388+ }
389+ fileInfo .dos .writeFloat (value );
379390 return NumberValue .ONE ;
380391 }
381392 }
0 commit comments