簡體   English   中英

如何使用Java寫/讀/寫內存

[英]how to write/read from/to memory using java

下面的Java代碼從JSON File中讀取值,使用freemarker模板存儲JSON值,並將帶有JSON鍵和值的新結構寫入文本文件並保存到上述路徑,然后從提到的路徑中讀取文本文件,將那個文本文件打印到TSC打印機。我擔心的是,我想將該臨時讀/寫文件存儲到內存中,請問對此有何幫助,如何將該臨時文件存儲到內存中?

Java代碼

public class JSONSimpleWritingToFileExample {  
public static void main (String[] args){

//  ************** Reading from JSON file **********

final String filePath = ("C:/Users//Desktop/333.json"); //JSON Path
FileReader reader = null;
try {
         reader = new FileReader(filePath);
         final JSONParser parser = new JSONParser();
         final JSONObject json = (JSONObject) parser.parse(reader);
         final JSONArray jsonUsers = (JSONArray) json.get("Booking");
         final Iterator<?> it = jsonUsers.iterator();
         while (it.hasNext())
         {
                    final JSONObject jsonUser = (JSONObject) it.next();
                    final String bookSrc = (String) jsonUser.get("Key1");
                    final String custName = (String) jsonUser.get("Key2");
                    final String custNum = (String) jsonUser.get("Key3");
                    final String custPName = (String) jsonUser.get("Key4");



// ********* Reading From Template *************                

         Configuration cfg = new Configuration();
try {
        //Load template from source folder
                    Template template = cfg.getTemplate("src/Test.ftl");  // Reading from Template path
        // Build the data-model
                    Map<String, Object> data = new HashMap<String, Object>();
                    data.put("Key1", ""+Value1);
                    data.put("Key2", ""+Value2); 
                    data.put("Key3", ""+Value3);
                    data.put("Key4", ""+Value4);

// Console output
                   Writer out = new OutputStreamWriter(System.out);
                   template.process(data, out);
                   out.flush();

// File output
                   Writer file = new FileWriter (new File("D:\\FTL_helloworld.txt")); // Writing text file path
                   template.process(data, file);
                   file.flush();
                   file.close();

// Reading Text file  & Printing Logic                  

                      FileInputStream textStream;
                  textStream = new FileInputStream("D:/FTL_helloworld.txt");
                  DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                  DocAttributeSet das=new HashDocAttributeSet();
                  Doc mydoc = new SimpleDoc(textStream, flavor, das);
                  PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
                  aset.add(OrientationRequested.PORTRAIT); 
                  @SuppressWarnings("unused")
                  PrinterJob pj = PrinterJob.getPrinterJob(); 
                  PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, aset);
                  PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
              for (int i = 0; i < services.length; i++) 
                  {
                        System.out.println(services[i].getName());
                  }
             if(services.length == 0) 
                  {
                        if(defaultService == null) 
                  {
                                     //no printer found
                  } 
                 else {
                                    //print using default
                            DocPrintJob job = defaultService.createPrintJob();
                            job.print(mydoc, aset);
                      }
                      } 
                else {

                    PrintService service = ServiceUI.printDialog(null, 200, 200, services, defaultService, flavor, aset);
                    if (service != null)
                       {
                         DocPrintJob job = service.createPrintJob();
                         job.print(mydoc, aset);
                       }
                       }

 } catch (IOException e) {
   e.printStackTrace();
    } finally {
                if (reader != null) {
                try {
                       reader.close();
                     } catch (IOException e) {
                        e.printStackTrace();

                     }
                    }
                }
} } catch ( Exception e){
                 e.printStackTrace();
    }

 }
}

303 JSON文件

{
"Booking": [ {
    "Key1":"Value1",
    "Key2":"Value2",
    "Key3":"Value3",
    "Key4":"Value4"

},
{
    "Key1":"Value1",
    "Key2":"Value2",
    "Key3":"Value3",
    "Key4":"Value4"

}]  
}

測試文件

Q799,B080+000
q831
rN
S4
D7
ZT
JF
OD,P
R24,0
N

X555,56,2,780,714
A771,73,1,1,2,1,N,"A  {0}"
A742,70,1,1,2,2,N,"   {1}({31})"
A765,450,1,1,2,2,N,"${Value1}"
A706,86,1,2,1,1,N,"${Value2}"
A682,86,1,2,1,1,N,"${Value3}"
A658,86,1,2,1,1,N,"${Value4}"
P1

與其將數據寫入文件然后從文件中讀取, ByteArrayOutputStream使用ByteArrayOutputStreamByteArrayInputStream (這意味着您的中間存儲機制是內存中的字節數組)。

FreeMarker的Template類使用Writer編寫輸出。 而不是使用FileWriter,請嘗試構造一個OutputStreamWriter:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(baos);
template.process(data, writer);
writer.close();

您可以檢索數據:

byte[] savedData = baos.toByteArray();

然后讀回:

ByteArrayInputStream bais = new ByteArrayInputStream(savedData);
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
DocAttributeSet das = new HashDocAttributeSet();
Doc mydoc = new SimpleDoc(bais, flavor, das);    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM