⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbasefiletest.java

📁 shape file read and write
💻 JAVA
字号:
/*
 *    Geotools2 - OpenSource mapping toolkit
 *    http://geotools.org
 *    (C) 2002-2006, Geotools Project Managment Committee (PMC)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 */
package org.geotools.data.shapefile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.geotools.TestData;
import org.geotools.data.shapefile.dbf.DbaseFileHeader;
import org.geotools.data.shapefile.dbf.DbaseFileReader;
import org.geotools.data.shapefile.dbf.DbaseFileWriter;

/**
 * 
 * @source $URL:
 *         http://svn.geotools.org/geotools/trunk/gt/modules/plugin/shapefile/src/test/java/org/geotools/data/shapefile/DbaseFileTest.java $
 * @version $Id: DbaseFileTest.java 28748 2008-01-14 21:52:51Z jeichar $
 * @author Ian Schneider
 * @author James Macgill
 */
public class DbaseFileTest extends TestCaseSupport {

    private static final Logger LOGGER = org.geotools.util.logging.Logging
            .getLogger("org.geotools.data.shapefile");

    static final String TEST_FILE = "shapes/statepop.dbf";

    private DbaseFileReader dbf = null;

    private ShpFiles shpFiles;

    public DbaseFileTest(String testName) throws IOException {
        super(testName);
    }

    public static void main(String[] args) {
        // verbose = true;
        junit.textui.TestRunner.run(suite(DbaseFileTest.class));
    }

    protected void setUp() throws Exception {
        super.setUp();
        shpFiles = new ShpFiles(TestData.url(TEST_FILE));
        dbf = new DbaseFileReader(shpFiles, false,
                ShapefileDataStore.DEFAULT_STRING_CHARSET);
    }

    public void testNumberofColsLoaded() {
        assertEquals("Number of attributes found incorect", 252, dbf
                .getHeader().getNumFields());
    }

    protected void tearDown() throws Exception {
        dbf.close();
        super.tearDown();
    }

    public void testNumberofRowsLoaded() {
        assertEquals("Number of rows", 49, dbf.getHeader().getNumRecords());
    }

    public void testDataLoaded() throws Exception {
        Object[] attrs = new Object[dbf.getHeader().getNumFields()];
        dbf.readEntry(attrs);
        assertEquals("Value of Column 0 is wrong", "Illinois", attrs[0]);
        assertEquals("Value of Column 4 is wrong", 143986.61,
                ((Double) attrs[4]).doubleValue(), 0.001);
    }

    public void testRowVsEntry() throws Exception {
        Object[] attrs = new Object[dbf.getHeader().getNumFields()];
        DbaseFileReader dbf2 = new DbaseFileReader(shpFiles, false,
                ShapefileDataStore.DEFAULT_STRING_CHARSET);
        while (dbf.hasNext()) {
            dbf.readEntry(attrs);
            DbaseFileReader.Row r = dbf2.readRow();
            for (int i = 0, ii = attrs.length; i < ii; i++) {
                assertNotNull(attrs[i]);
                assertNotNull(r.read(i));
                assertEquals(attrs[i], r.read(i));
            }
        }
        dbf2.close();
    }

    public void testHeader() throws Exception {
        DbaseFileHeader header = new DbaseFileHeader();

        Level before = LOGGER.getLevel();
        try {
            LOGGER.setLevel(Level.INFO);

            header.addColumn("emptyString", 'C', 20, 0);
            header.addColumn("emptyInt", 'N', 20, 0);
            header.addColumn("emptyDouble", 'N', 20, 5);
            header.addColumn("emptyFloat", 'F', 20, 5);
            header.addColumn("emptyLogical", 'L', 1, 0);
            header.addColumn("emptyDate", 'D', 20, 0);
            int length = header.getRecordLength();
            header.removeColumn("emptyDate");
            assertTrue(length != header.getRecordLength());
            header.addColumn("emptyDate", 'D', 20, 0);
            assertTrue(length == header.getRecordLength());
            header.removeColumn("billy");
            assertTrue(length == header.getRecordLength());
        } finally {
            LOGGER.setLevel(before);
        }
    }

    public void testAddColumn() throws Exception {
        DbaseFileHeader header = new DbaseFileHeader();

        Level before = LOGGER.getLevel();
        try {
            LOGGER.setLevel(Level.INFO);

            header.addColumn("emptyInt", 'N', 9, 0);
            assertSame(Integer.class, header.getFieldClass(0));
            assertEquals(9, header.getFieldLength(0));

            header.addColumn("emptyString", 'C', 20, 0);
            assertSame(String.class, header.getFieldClass(1));
            assertEquals(20, header.getFieldLength(1));
        } finally {
            LOGGER.setLevel(before);
        }
    }

    public void testEmptyFields() throws Exception {
        DbaseFileHeader header = new DbaseFileHeader();
        header.addColumn("emptyString", 'C', 20, 0);
        header.addColumn("emptyInt", 'N', 20, 0);
        header.addColumn("emptyDouble", 'N', 20, 5);
        header.addColumn("emptyFloat", 'F', 20, 5);
        header.addColumn("emptyLogical", 'L', 1, 0);
        header.addColumn("emptyDate", 'D', 20, 0);
        header.setNumRecords(20);
        File f = new File(System.getProperty("java.io.tmpdir"),
                "scratchDBF.dbf");
        f.deleteOnExit();
        FileOutputStream fout = new FileOutputStream(f);
        DbaseFileWriter dbf = new DbaseFileWriter(header, fout.getChannel());
        for (int i = 0; i < header.getNumRecords(); i++) {
            dbf.write(new Object[6]);
        }
        dbf.close();
        ShpFiles tempShpFiles = new ShpFiles(f);
        DbaseFileReader r = new DbaseFileReader(tempShpFiles, false,
                ShapefileDataStore.DEFAULT_STRING_CHARSET);
        int cnt = 0;
        while (r.hasNext()) {
            cnt++;
            Object[] o = r.readEntry();
            assertTrue(o.length == r.getHeader().getNumFields());
        }
        assertEquals("Bad number of records", cnt, 20);
        r.close(); // make sure the channel is closed
        f.delete();
    }

    public void testFieldFormatter() throws Exception {
        DbaseFileWriter.FieldFormatter formatter = new DbaseFileWriter.FieldFormatter();

        String stringWithInternationChars = "hello " + '\u20ac';
        // if (verbose) {
        // System.out.println(stringWithInternationChars);
        // }
        String formattedString = formatter.getFieldString(10,
                stringWithInternationChars);

        assertEquals("          ".getBytes().length,
                formattedString.getBytes().length);

        // test when the string is too big.
        stringWithInternationChars = '\u20ac' + "1234567890";
        formattedString = formatter.getFieldString(10,
                stringWithInternationChars);

        assertEquals("          ".getBytes().length,
                formattedString.getBytes().length);

    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -