Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/sample/nio/file/Xdd.java
38829 views
/*1* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions5* are met:6*7* - Redistributions of source code must retain the above copyright8* notice, this list of conditions and the following disclaimer.9*10* - Redistributions in binary form must reproduce the above copyright11* notice, this list of conditions and the following disclaimer in the12* documentation and/or other materials provided with the distribution.13*14* - Neither the name of Oracle nor the names of its15* contributors may be used to endorse or promote products derived16* from this software without specific prior written permission.17*18* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS19* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,20* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR21* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR22* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,23* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,24* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR25* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF26* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING27* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS28* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.29*/3031/*32* This source code is provided to illustrate the usage of a given feature33* or technique and has been deliberately simplified. Additional steps34* required for a production-quality application, such as security checks,35* input validation and proper error handling, might not be present in36* this sample code.37*/383940import java.nio.ByteBuffer;41import java.nio.charset.Charset;42import java.nio.file.*;43import java.nio.file.attribute.*;44import java.io.IOException;4546/**47* Example code to list/set/get/delete the user-defined attributes of a file.48*/4950public class Xdd {5152static void usage() {53System.out.println("Usage: java Xdd <file>");54System.out.println(" java Xdd -set <name>=<value> <file>");55System.out.println(" java Xdd -get <name> <file>");56System.out.println(" java Xdd -del <name> <file>");57System.exit(-1);58}5960public static void main(String[] args) throws IOException {61// one or three parameters62if (args.length != 1 && args.length != 3)63usage();6465Path file = (args.length == 1) ?66Paths.get(args[0]) : Paths.get(args[2]);6768// check that user defined attributes are supported by the file store69FileStore store = Files.getFileStore(file);70if (!store.supportsFileAttributeView(UserDefinedFileAttributeView.class)) {71System.err.format("UserDefinedFileAttributeView not supported on %s\n", store);72System.exit(-1);7374}75UserDefinedFileAttributeView view =76Files.getFileAttributeView(file, UserDefinedFileAttributeView.class);7778// list user defined attributes79if (args.length == 1) {80System.out.println(" Size Name");81System.out.println("-------- --------------------------------------");82for (String name: view.list()) {83System.out.format("%8d %s\n", view.size(name), name);84}85return;86}8788// Add/replace a file's user defined attribute89if (args[0].equals("-set")) {90// name=value91String[] s = args[1].split("=");92if (s.length != 2)93usage();94String name = s[0];95String value = s[1];96view.write(name, Charset.defaultCharset().encode(value));97return;98}99100// Print out the value of a file's user defined attribute101if (args[0].equals("-get")) {102String name = args[1];103int size = view.size(name);104ByteBuffer buf = ByteBuffer.allocateDirect(size);105view.read(name, buf);106buf.flip();107System.out.println(Charset.defaultCharset().decode(buf).toString());108return;109}110111// Delete a file's user defined attribute112if (args[0].equals("-del")) {113view.delete(args[1]);114return;115}116117// option not recognized118usage();119}120}121122123