Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #11190
| From | Jeff Higgins <jeff@invalid.invalid> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: append() vs. write() |
| Date | 2012-01-10 16:48 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <jeib9l$shf$1@dont-email.me> (permalink) |
| References | <3d2746a6-f57c-4fa1-b547-dfddc23bb6b6@n30g2000yqd.googlegroups.com> |
On 01/10/2012 11:17 AM, Benjamin Trendelkamp-Schroer wrote:
> Hi,
>
> I want to write a method that can write possibly large matrices of
> floating point numbers in scientific notation to human readable ascii
> files. I want to be able to specify the formatting of the floating
> point numbers usins format strings like "%1.8e" or "%2.5f".
>
> From what I take from the java doc. I can do something like
>
> i) java.io.File file = new java.io.File(pathnameOfMyFile);
> java.io.FileWriter fileWriter = new java.io.FileWriter(file);
> java.util.Formatter f = new java.util.Formatter(fileWriter);
> for(int i ...){
> for(int j ...){
> f.format("%1.8e", Matrix.getEntry(i,j))
> f.format("%s", columnSeparator) //columnSeparator = "
> " (for example)
> }
> f.format("%s", rowSeparator) // rowSeparator="\n" (for example)
> }
>
> ii) Use a buffered writer which is adviced as being good practice in
> all tutorials since it has a buffered write method. But as far as I
> understand Formatter does only use the format method of the Appendable
> interface and not the bufered write method. If my Matrix gets very
> large (say 10000 rows and columns) I would have to put each row in an
> appropriately formatted String o0r StringBuffer, calling the append
> method on the StringBuffer through the format method of Formatter many
> times and use write to output it to the buffered writer. But this
> string would be quite large + I would have to create that string and
> the Formatter for each new row (using for example
> StringBuffer.toString(), Formatter(StringBuffer)).
>
> I am asking because I am not sure what is the best practice hear. My
> favorite solution would be to have a method that I could just pass a
> Formatter to so that I could use that formatter object to call other
> methods doing the formatting on the level of single entries of my
> matrix without the need to create a lot of formatter objects. But on
> the other hand I would like to make writing out to files as fast as
> possible and do not want to suffer performance penalties from
> repeatedly calling an append() method where it would be advisable to
> make fewer calls to write with string containing more characters.
>
> I am quite new to Java so I would appreciate any help with that and
> ask you to excuse any obvious mistakes and style flaws that I have
> made.
I'll try again.
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Collection;
public class Scratch {
public static void main(String[] args) throws IOException {
Writer writer = new PrintWriter(
new BufferedWriter(
new FileWriter(args[0])));
String tableHeader, tableFooter,
rowHeader, rowFooter, columnSeparator;
// not intended to compile
Matrix matrix;
MatrixRow row;
writer.append(tableHeader);
while (matrix.hasRows()) {
row = matrix.nextRow();
writer.append(rowHeader);
while (row.hasNextCell()) {
// java.io.Writer has an append method that takes a CharSequence
writer.append(
getCellFormatter(row.rowIndex, row.columnIndex)
//DecimalFormat has a format method that returns a
StringBuilder
//StringBuilder implements CharSequence
.format(row.nextCell().doubleValue(),null,null));
writer.append(columnSeparator);
}
writer.append(rowFooter);
}
writer.append(tableFooter);
}
}
/* probably in your Matrix class
DecimalFormat getCellFormatter(int rowIndex, int columnIndex) {
DecimalFormat formatter =
(DecimalFormat)DecimalFormat.getInstance();
// apply a pattern depending upon row and column
formatter.applyPattern("yourPattern");
return formatter;
}
*/
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
append() vs. write() Benjamin Trendelkamp-Schroer <benjamin.trendelkampschroer@googlemail.com> - 2012-01-10 08:17 -0800
Re: append() vs. write() Jeff Higgins <jeff@invalid.invalid> - 2012-01-10 13:14 -0500
Re: append() vs. write() markspace <-@.> - 2012-01-10 13:30 -0800
Re: append() vs. write() Jeff Higgins <jeff@invalid.invalid> - 2012-01-10 16:48 -0500
Re: append() vs. write() Jeff Higgins <jeff@invalid.invalid> - 2012-01-10 17:15 -0500
Re: append() vs. write() Jeff Higgins <jeff@invalid.invalid> - 2012-01-10 18:35 -0500
Re: append() vs. write() Jeff Higgins <jeff@invalid.invalid> - 2012-01-10 19:01 -0500
Re: append() vs. write() Lew <noone@lewscanon.com> - 2012-01-10 18:06 -0800
csiph-web