1 package org.unicode.cldr.rdf; 2 3 import com.google.common.collect.Multimap; 4 import java.io.File; 5 import java.io.IOException; 6 import java.io.PrintWriter; 7 import java.util.Map; 8 import org.unicode.cldr.draft.FileUtilities; 9 import org.unicode.cldr.util.CLDRConfig; 10 11 /** Utility to aid in writing .tsv files */ 12 public class TsvWriter { 13 /** 14 * Write a Multimap as a tsv with pairs 15 * 16 * @param fn filename 17 * @param map 18 * @param k key column name 19 * @param v value column name 20 * @throws IOException 21 */ writeTsv(String fn, Multimap<String, String> map, String k, String v)22 public static void writeTsv(String fn, Multimap<String, String> map, String k, String v) 23 throws IOException { 24 System.out.println("Writing " + fn); 25 try (PrintWriter w = FileUtilities.openUTF8Writer(getTsvDir(), fn)) { 26 writeRow(w, k, v); // header 27 map.entries().forEach(e -> writeRow(w, e.getKey(), e.getValue())); 28 } 29 } 30 31 /** 32 * Write a Map as a tsv with pairs 33 * 34 * @param fn filename 35 * @param map 36 * @param k key column name 37 * @param v value column name 38 * @throws IOException 39 */ writeTsv(String fn, Map<String, String> map, String k, String v)40 public static void writeTsv(String fn, Map<String, String> map, String k, String v) 41 throws IOException { 42 System.out.println("Writing " + fn); 43 try (PrintWriter w = FileUtilities.openUTF8Writer(getTsvDir(), fn)) { 44 writeRow(w, k, v); // header 45 map.entrySet().forEach(e -> writeRow(w, e.getKey(), e.getValue())); 46 } 47 } 48 getTsvDir()49 public static File getTsvDir() { 50 File base = CLDRConfig.getInstance().getCldrBaseDirectory(); 51 File tsvDir = new File(base, "tools/cldr-rdf/external"); 52 tsvDir.mkdirs(); 53 return tsvDir; 54 } 55 56 /** 57 * Write a TSV row 58 * 59 * @param w stream to write to 60 * @param elements columns to write 61 */ writeRow(PrintWriter w, CharSequence... elements)62 public static void writeRow(PrintWriter w, CharSequence... elements) { 63 w.println(String.join("\t", elements)); 64 } 65 } 66