001 /*
002 * Copyright 2005,2009 Ivan SZKIBA
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.ini4j.tutorial;
017
018 import org.ini4j.Wini;
019
020 import org.ini4j.sample.Dwarf;
021 import org.ini4j.sample.Dwarfs;
022
023 import org.ini4j.test.DwarfsData;
024 import org.ini4j.test.Helper;
025
026 import static org.junit.Assert.*;
027
028 import java.io.File;
029 import java.io.FileInputStream;
030 import java.io.FileOutputStream;
031 import java.io.IOException;
032
033 //<editor-fold defaultstate="collapsed" desc="apt documentation">
034 //|
035 //| -------------------
036 //| One minute Tutorial
037 //|
038 //|One minute Tutorial - First step
039 //|
040 //| First step with \[ini4j\] library. No data model, no interfaces, no design
041 //| patterns, simply read and write windows .ini files.
042 //|
043 //</editor-fold>
044 public class OneMinuteTutorial extends AbstractTutorial
045 {
046 public static void main(String[] args) throws Exception
047 {
048 new OneMinuteTutorial().run(filearg(args));
049 }
050
051 protected void copy(File inputFile, File outputFile) throws IOException
052 {
053 FileInputStream is = new FileInputStream(inputFile);
054 FileOutputStream os = new FileOutputStream(outputFile);
055 byte[] buff = new byte[8192];
056 int n;
057
058 while ((n = is.read(buff)) > 0)
059 {
060 os.write(buff, 0, n);
061 }
062
063 is.close();
064 os.close();
065 }
066
067 @Override protected void run(File arg) throws Exception
068 {
069 File file = File.createTempFile("tutorial", ".ini");
070
071 file.deleteOnExit();
072 copy(arg, file);
073 sample01(file.getCanonicalPath());
074 sample02(file.getCanonicalPath());
075 }
076
077 //|
078 //| Lets read some value from .ini file...
079 //|
080 //{
081 void sample01(String filename) throws IOException
082 {
083 Wini ini = new Wini(new File(filename));
084 int age = ini.get("happy", "age", int.class);
085 double height = ini.get("happy", "height", double.class);
086 String dir = ini.get("happy", "homeDir");
087
088 //}
089 //| ... assuming there is a section with name <<<happy>>>, which contains at least
090 //| the following options: <<<age>>>, <<<height>>> and <<<homeDir>>>, something like
091 //| this:
092 //|
093 //|+---------+
094 //| [happy]
095 //| age = 99
096 //| height = 77.66
097 //| homeDir = /home/happy
098 //|+---------+
099 //|
100 //|
101 assertEquals(DwarfsData.happy.age, age);
102 assertEquals(DwarfsData.happy.height, height, Helper.DELTA);
103 assertEquals(DwarfsData.happy.homeDir, dir);
104 }
105
106 //| Now let see how to write values....
107 //|
108 //{
109 void sample02(String filename) throws IOException
110 {
111 Wini ini = new Wini(new File(filename));
112
113 ini.put("sleepy", "age", 55);
114 ini.put("sleepy", "weight", 45.6);
115 ini.store();
116
117 //}
118 //| ... and then file will have a section <<<sleepy>>> and this section
119 //| will contains at least two options: <<<age>>> with value <<<55>>> and <<<weight>>>
120 //| with value <<<45.6>>>, something like this:
121 //|
122 //|+---------+
123 //| [sleepy]
124 //| age = 55
125 //| weight = 45.6
126 //|+---------+
127 //|
128 assertEquals(55, (int) ini.get(Dwarfs.PROP_SLEEPY, Dwarf.PROP_AGE, int.class));
129 assertEquals(45.6, (double) ini.get(Dwarfs.PROP_SLEEPY, Dwarf.PROP_WEIGHT, double.class), Helper.DELTA);
130 }
131
132 //|
133 //| If you want to know more about this library, read
134 //| {{{../tutorial/index.html}tutorials}}
135 }