tabs.java
来自「java操作excel的类」· Java 代码 · 共 613 行 · 第 1/2 页
JAVA
613 行
/* * Adjusts tabs and spaces. * Copyright (C) 2002 Stephen Ostermiller * http://ostermiller.org/contact.pl?regarding=Java+Utilities * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * See COPYING.TXT for details. */package com.Ostermiller.util;import java.io.*;import gnu.getopt.*;import java.text.MessageFormat;import java.util.ResourceBundle;import java.util.Locale;/** * Stream editor to alter the line separators on text to match * that of a given platform. * More information about this class is available from <a target="_top" href= * "http://ostermiller.org/utils/LineEnds.html">ostermiller.org</a>. * * @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities * @since ostermillerutils 1.00.00 */public class Tabs { /** * Version number of this program * * @since ostermillerutils 1.00.00 */ public static final String version = "1.0"; /** * Locale specific strings displayed to the user. * * @since ostermillerutils 1.00.00 */ protected static ResourceBundle labels = ResourceBundle.getBundle("com.Ostermiller.util.Tabs", Locale.getDefault()); /** * Can be passed instead of a spaces argument to use tabs instead. * * @since ostermillerutils 1.00.00 */ public final static int TABS = -1; /** * Converts the tabs in files, or standard input. * Run with --help argument for more information. * * @param args Command line arguments. * * @since ostermillerutils 1.00.00 */ public static void main(String[] args){ // create the command line options that we are looking for LongOpt[] longopts = { new LongOpt(labels.getString("help.option"), LongOpt.NO_ARGUMENT, null, 1), new LongOpt(labels.getString("version.option"), LongOpt.NO_ARGUMENT, null, 2), new LongOpt(labels.getString("about.option"), LongOpt.NO_ARGUMENT, null, 3), new LongOpt(labels.getString("width.option"), LongOpt.REQUIRED_ARGUMENT, null, 'w'), new LongOpt(labels.getString("guess.option"), LongOpt.NO_ARGUMENT, null, 'g'), new LongOpt(labels.getString("tabs.option"), LongOpt.NO_ARGUMENT, null, 't'), new LongOpt(labels.getString("spaces.option"), LongOpt.REQUIRED_ARGUMENT, null, 's'), new LongOpt(labels.getString("force.option"), LongOpt.NO_ARGUMENT, null, 'f'), new LongOpt(labels.getString("quiet.option"), LongOpt.NO_ARGUMENT, null, 'q'), new LongOpt(labels.getString("reallyquiet.option"), LongOpt.NO_ARGUMENT, null, 'Q'), new LongOpt(labels.getString("verbose.option"), LongOpt.NO_ARGUMENT, null, 'v'), new LongOpt(labels.getString("reallyverbose.option"), LongOpt.NO_ARGUMENT, null, 'V'), new LongOpt(labels.getString("noforce.option"), LongOpt.NO_ARGUMENT, null, 4), }; String oneLetterOptions = "w:gts:fVvqQ"; Getopt opts = new Getopt(labels.getString("tabs"), args, oneLetterOptions, longopts); int inputTabWidth = TABS; int outputTabWidth = 4; boolean force = false; boolean printMessages = false; boolean printExtraMessages = false; boolean printErrors = true; int c; while ((c = opts.getopt()) != -1){ switch(c){ case 1:{ // print out the help message String[] helpFlags = new String[]{ "--" + labels.getString("help.option"), "--" + labels.getString("version.option"), "--" + labels.getString("about.option"), "-w --" + labels.getString("width.option") + " <" + labels.getString("s.arg") + ">", "-g --" + labels.getString("guess.option"), "-t --" + labels.getString("tabs.option"), "-s --" + labels.getString("spaces.option") + " <" + labels.getString("s.arg") + ">", "-f --" + labels.getString("force.option"), "--" + labels.getString("noforce.option"), "-V --" + labels.getString("reallyverbose.option"), "-v --" + labels.getString("verbose.option"), "-q --" + labels.getString("quiet.option"), "-Q --" + labels.getString("reallyquiet.option"), }; int maxLength = 0; for (int i=0; i<helpFlags.length; i++){ maxLength = Math.max(maxLength, helpFlags[i].length()); } maxLength += 2; System.out.println( labels.getString("tabs") + " [-" + StringHelper.replace(oneLetterOptions,":","") + "] <" + labels.getString("files") + ">" + "\n" + labels.getString("purpose.message") + "\n" + " " + labels.getString("stdin.message") + "\n" + " " + StringHelper.postpad(helpFlags[0] ,maxLength, ' ') + labels.getString("help.message") + "\n" + " " + StringHelper.postpad(helpFlags[1] ,maxLength, ' ') + labels.getString("version.message") + "\n" + " " + StringHelper.postpad(helpFlags[2] ,maxLength, ' ') + labels.getString("about.message") + "\n" + " " + StringHelper.postpad(helpFlags[3] ,maxLength, ' ') + labels.getString("w.message") + "\n" + " " + StringHelper.postpad(helpFlags[4] ,maxLength, ' ') + labels.getString("g.message") + " (" + labels.getString("default") + ")\n" + " " + StringHelper.postpad(helpFlags[5] ,maxLength, ' ') + labels.getString("t.message") + "\n" + " " + StringHelper.postpad(helpFlags[6] ,maxLength, ' ') + labels.getString("s.message") + " (" + labels.getString("default") + "=4)\n" + " " + StringHelper.postpad(helpFlags[7] ,maxLength, ' ') + labels.getString("f.message") + "\n" + " " + StringHelper.postpad(helpFlags[8] ,maxLength, ' ') + labels.getString("noforce.message") + " (" + labels.getString("default") + ")\n" + " " + StringHelper.postpad(helpFlags[9] ,maxLength, ' ') + labels.getString("V.message") + "\n" + " " + StringHelper.postpad(helpFlags[10] ,maxLength, ' ') + labels.getString("v.message") + "\n" + " " + StringHelper.postpad(helpFlags[11] ,maxLength, ' ') + labels.getString("q.message") + " (" + labels.getString("default") + ")\n" + " " + StringHelper.postpad(helpFlags[12] ,maxLength, ' ') + labels.getString("Q.message") + "\n" ); System.exit(0); } break; case 2:{ // print out the version message System.out.println(MessageFormat.format(labels.getString("version"), new String[] {version})); System.exit(0); } break; case 3:{ System.out.println( labels.getString("tabs") + " -- " + labels.getString("purpose.message") + "\n" + MessageFormat.format(labels.getString("copyright"), new String[] {"2002", "Stephen Ostermiller (http://ostermiller.org/contact.pl?regarding=Java+Utilities)"}) + "\n\n" + labels.getString("license") ); System.exit(0); } break; case 'w':{ try { inputTabWidth = Integer.parseInt(opts.getOptarg()); } catch (NumberFormatException x){ inputTabWidth = -1; } if (inputTabWidth<1 || inputTabWidth>20){ System.err.println(labels.getString("widtherror")); System.exit(1); } } break; case 'g':{ inputTabWidth = TABS; } break; case 's':{ try { outputTabWidth = Integer.parseInt(opts.getOptarg()); } catch (NumberFormatException x){ outputTabWidth = -1; } if (outputTabWidth<1 || outputTabWidth>20){ System.err.println("widtherror"); System.exit(1); } } break; case 't':{ outputTabWidth = TABS; } break; case 'f':{ force = true; } break; case 4:{ force = false; } break; case 'V':{ printExtraMessages = true; printMessages = true; printErrors = true; } break; case 'v':{ printExtraMessages = false; printMessages = true; printErrors = true; } break; case 'q':{ printExtraMessages = false; printMessages = false; printErrors = true; } break; case 'Q':{ printExtraMessages = false; printMessages = false; printErrors = false; } break; default:{ System.exit(1); } } } int exitCond = 0; boolean done = false; for (int i=opts.getOptind(); i<args.length; i++){ boolean modified = false; done = true; File source = new File(args[i]); if (!source.exists()){ if(printErrors){ System.err.println(MessageFormat.format(labels.getString("doesnotexist"), new String[] {args[i]})); } exitCond = 1; } else if (!source.canRead()){ if(printErrors){ System.err.println(MessageFormat.format(labels.getString("cantread"), new String[] {args[i]})); } exitCond = 1; } else if (!source.canWrite()){ if(printErrors){ System.err.println(MessageFormat.format(labels.getString("cantwrite"), new String[] {args[i]})); } exitCond = 1; } else { try { if(convert (source, inputTabWidth, outputTabWidth, !force)){ if (printMessages){ System.out.println(MessageFormat.format(labels.getString("modified"), new String[] {args[i]})); } } else { if (printExtraMessages){ System.out.println(MessageFormat.format(labels.getString("alreadycorrect"), new String[] {args[i]})); } } } catch (IOException x){ if(printErrors){ System.err.println(args[i] + ": " + x.getMessage()); } exitCond = 1; } } } if (!done){ if(inputTabWidth == TABS){ System.err.println(labels.getString("stdinguess")); exitCond = 1; } else { try { convert (System.in, System.out, inputTabWidth, outputTabWidth, !force); } catch (IOException x){ System.err.println(x.getMessage()); exitCond = 1; } } } System.exit(exitCond); } private final static int DEFAULT_INPUT_TAB_WIDTH = 4; private final static int DEFAULT_INPUT_FILE_TAB_WIDTH = TABS; private final static int DEFAULT_OUTPUT_TAB_WIDTH = 4; private final static boolean DEFAULT_MODIFY_BINARY = false; /** * Read form the input stream, changing the tabs at the beginning of each line * to four spaces, write the result to the output stream. * * @param in stream that contains the text which needs line number conversion. * @param out stream where converted text is written. * @return true if the output was modified from the input, false if it is exactly the same * @throws BinaryDataException if non-text data is encountered. * @throws IOException if an input or output error occurs. * * @since ostermillerutils 1.00.00 */ public static boolean convert(InputStream in, OutputStream out) throws IOException { return convert(in, out, DEFAULT_INPUT_TAB_WIDTH, DEFAULT_OUTPUT_TAB_WIDTH, DEFAULT_MODIFY_BINARY); } /** * Read form the input stream, changing the tabs at the beginning of each line * to the specified number of spaces, write the result to the output stream. * * @param in stream that contains the text which needs line number conversion. * @param out stream where converted text is written. * @param inputTabWidth number of spaces used instead of a tab in the input. * @return true if the output was modified from the input, false if it is exactly the same * @throws BinaryDataException if non-text data is encountered. * @throws IOException if an input or output error occurs. * @throws IllegalArgumentException if tab widths are not between 1 and 20 or TABS. * * @since ostermillerutils 1.00.00 */ public static boolean convert(InputStream in, OutputStream out, int inputTabWidth) throws IOException { return convert(in, out, inputTabWidth, DEFAULT_OUTPUT_TAB_WIDTH, DEFAULT_MODIFY_BINARY); } /**
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?