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