how to convert dos file to unix file in eclipse

D

david wolf

I am working on dos environment for some java files but need to check
in to unix sytem.how to convert dos file to unix file in eclipse?

Thanks,

David
 
O

Oliver Wong

david wolf said:
I am working on dos environment for some java files but need to check
in to unix sytem.how to convert dos file to unix file in eclipse?

It's probably easier if you use a seperate tool rather than Eclipse for
this task. Within Eclipse, you can right click on the project and choose
"properties" to select the line ending delimiter, but I'm not sure if this
only affects newly created files, or if it'll change the existing files.

Instead, open the files up in a programmer's text editor (e.g. jEdit,
http://www.jedit.org/) and save them with the new line delimiter, or write a
simple program or script to do the conversion for you.

- Oliver
 
M

Martin Gregorie

david said:
I am working on dos environment for some java files but need to check
in to unix sytem.how to convert dos file to unix file in eclipse?
Looks like a job for a scriptable shell command to me. Read the man page
for "tr" or see if your system has the dos2Unix utility installed.
 
R

Roedy Green

I am working on dos environment for some java files but need to check
in to unix sytem.how to convert dos file to unix file in eclipse?

here is a little utility you could use to do the job in batch. You
could also do it with a Funduc search/replace script.

// com.mindprod.tabout.Tabout.java

/**
to go:
single char from console, properly. Need modal dialog,
ActionListener, KeyListener.
- allow parms in any order
- allow "" as legit extension
- allow multiple filenames on the command line.
- use system default line ending.
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.EOFException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

/**
* Expands tabs and converts line ending between Unix and NT
conventions.
* Trims the trailing spaces.
* usage: java Tabout MySource.java /U
* or java Tabout Mysource.java /N (the default)
* /U = unix [\n] or /N = NT [\r\n] line ending conventions.
* alternatives -u -U for unix, -n -N -w -W for windows
*
* copyright (c) 1998-2006 Roedy Green, Canadian Mind Products
* #327 - 964 Heywood Avenue
* Victoria, BC Canada V8V 2Y5
* tel: (250) 361-9093
* mailto:[email protected]
* http://mindprod.com
*
* Source and excutables may be freely used for any purpose except
military.
*/
public class Tabout
{

private static final String EmbeddedCopyright =
"copyright (c) 1998-2006 Roedy Green, Canadian Mind Products,
http://mindprod.com";

// input "before" file
static String inFilename;
static File inFile;
static BufferedReader inReader;

// output "after" file, the temporary, later renamed to match the
input
static String outFilename;
static File outFile;
static PrintWriter outWriter;

// how many spaces per tab stop.
static final int TABSPACING = 8;

// which line end convention do we use
static boolean unix = false;

/**
* extensions known safe to run Tabout on.
*/
static final String[] goodExtensions =
{
"ans",
"asm",
"bat",
"batfrag",
"btm",
"btmfrag",
"c",
"cfrag",
"cmd",
"cpp",
"cppfrag",
"ctl",
"h",
"hfrag",
"hpp",
"hppfrag",
"htm",
"html",
"htmlfrag",
"ih",
"ini",
"java",
"javafrag",
"key",
"lst",
"mac",
"pas",
"rh",
"sql",
"sqlfrag",
"txt",
"use",
"xml",
"xmlfrag",
};

/**
* extensions known unsafe to run Tabout on.
*/
static final String[] badExtensions =
{
"bmp",
"class",
"com",
"dll",
"exe",
"gif",
"jar",
"jpg",
"obj",
"png",
"ser",
"so",
"vep",
"zip"
};

/**
* Command line utility to expand tabs,
* modify line ends to NT or Unix conventions,
* and remove trailing blanks.
*/
public static void main( String[] args )
{
try
{

analyseCommandLine(args);

openInReader(); /* Open input "before" file. */
/* Make sure file exists before */
/* song and dance about extension. */

ensureSafeFilename(); /* make sure filename has sane
extension */

openOutWriter(); /* open output "after" file */

System.out.println("Expanding tabs to spaces in "
+ inFilename + " for " + (unix ?
"Unix/Linux." : "NT/Win95/DOS."));

/* copy inReader to outWriter expanding tabs */
processFiles();

/* Rename output to input */
inReader.close();
outWriter.close();
inFile.delete();
outFile.renameTo(inFile);
// don't delete outFile, it has been renamed to a real file
}
catch ( IOException e )
{
System.out.print("Oops! IO failure. e.g. out of disk space.
\n");
die();
}

} // end main

/**
* analyse the command line. It should have a filename and
optionally /U or /D
* case insensitive.
*/
static void analyseCommandLine(String[] args)
{
if ( ! (1 <= args.length && args.length <= 2) )
{
banner();
System.out.println("Oops! usage: TABOUT Myfile.TXT /U
\n");
die();
}

inFilename = args[0]; /* file to convert */
if ( args.length == 2 )
{
String option = args[1];
if ( option.startsWith( "/" ) || option.startsWith( "-" ) )
option= option.substring( 1 );
option = option.toLowerCase();
unix = false;
if ( option.equals( "u" ) )
{
unix = true;
}
else
if ( option.equals ( "n" ) | option.equals ( "w" ) |
option.equals ( "d" ) )
{
unix = false;
}
else
{
banner();
System.out.println("Oops! usage: TABOUT Myfile.TXT /u
(/w /d /n) \n");
die();

}
}
} // end analyseCommandLine

/**
* display a banner about the author
*/
static void banner()
{
/* Usually not displayed, just embedded. */

System.out.println("\n°±²Û Tabout 2.3 Û²±°"
+ "\nJava Freeware to expand tabs to spaces,
and convert Windows <-> Unix files"
+ "\ncopyright (c) 1998-2006 Roedy Green,
Canadian Mind Products"
+ "\n#327 - 964 Heywood Avenu, Victoria, BC
Canada V8V 2Y5"
+ "\nTelephone: (250) 361-9093
Internet:[email protected]"
+ "\nMay be used freely for non-military use
only\n\n");

} // end banner

/**
* open the input "before" file
*/
static void openInReader()
{
try
{
inFile = new File(inFilename);
if ( !inFile.exists() )
{
banner();
System.out.print("Oops! Cannot find file ");
System.out.println(inFilename);
die();
}
if ( !inFile.canRead() )
{
banner();
System.out.print("Oops! no permission to read (i.e.
examine) the file ");
System.out.println(inFilename);
die();
}
if ( !inFile.canWrite() )
{
banner();
System.out.print("Oops! no permission to write (i.e.
change) the file ");
System.out.println(inFilename);
die();
}

inReader = new BufferedReader(new FileReader(inFile), 4096 /*
buffsize */);
}
catch ( FileNotFoundException e )
{
banner();
System.out.print("Oops! Cannot open file ");
System.out.println(inFilename);
die();
}
} // end openInReader

/**
* make sure the filename we are about to process has a safe
extension.
*/
static void ensureSafeFilename()
{
/* Ensure appropriate file name extensions.
good =.ASM .PAS .etc - done without prompt
bad =.EXE .COM .OBJ - abort
warning =.DOC & others - ask
*/

String extension = "";
int whereDot = inFilename.lastIndexOf('.');
if ( whereDot >=0 && whereDot <= inFilename.length()-2 )
extension = inFilename.substring(whereDot+1);

for ( int i=0 ; i<goodExtensions.length; i++ )
{
if ( extension.equalsIgnoreCase(goodExtensions) )
{ /* match, it is Good */
return;
}
}

for ( int i=0; i<badExtensions.length; i++ )
{
if ( extension.equalsIgnoreCase(badExtensions) )
{ /* match, it is bad */
banner();
System.out.print("Oops! Tabout cannot be used on files
with extensions such as ");
System.out.println(inFilename);
die();
}
}
/* just give a warning */
if ( ! confirm("Warning!\n" +
"Tabout is not usually used on files such as " +
inFilename + ".\n"
+ "Do you want to continue and expand the tabs
anyway?") )
{
die();
}
} // end ensureSafeFilename

/**
* Ask user to confirm that some action is ok.
*
* @param prompt. Question to ask the user.
*
* @return true if the user answers, yes it is ok to proceed.
*
* Should redo this with a modal dialog so don't have to hit Y
enter.
*/
static boolean confirm(String prompt)
{
/* just give a warning */
System.out.print(prompt);

System.out.println(" (Y)es (N)o ");
while ( true )
{ /* loop forever till user enters Y or N */
honk();
int response = '\033';

try
{
// read single keystroke, even though user has to hit
enter.
response = System.in.read(); // the console is a
fileInputReader
}
catch ( IOException e )
{

}

response = Character.toUpperCase((char)response);

switch ( response )
{
case 'Y':
System.out.println("Yes");
return true;

case 'N':
System.out.println("No");
return false;

/* others, keep looping */
} // end switch
} // end while
} // end confirm

/**
* open the output "after" file
*/
static void openOutWriter()
{

try
{
// get a temporary file in the same directory as inFile.
outFile = getTempFile("Tabout", inFile);
outWriter = new PrintWriter(
new BufferedWriter(
new
FileWriter(outFile), 4096 /* buffsize */),
false /* auto flush */);
}
catch ( IOException e )
{
System.out.println("Oops! Cannot create the temporary work
file\n");
die();
}

} // end OpenOutWriter

/**
* NO LONGER NEEDED. Use Java builtin instead.
* Create a uniquely named temporary file of the form
XXX99999999.tmp.
*
* @param id a string prepended on the file generated. Should you
fail to delete
* it later, the id will help identify where it came from. null
and "" also allowed.
*
* @param near if null, the temporary file will be created in the
current directory.
* If near represents a file, the temporary file will be created
in the
* same directory as near.
* If near represents a directory, the temporary file will be
created in that
* directory.
* If near is invalid, then the temporary file will be created in
the current
* directory
*
* @return a temporary File with a unique name of the form
XXX99999999.tmp.
*/
static File getTempFile (String id, File near) throws IOException
{
String prepend = (id != null) ? id : "";
String path = null;
if ( near != null )
if ( near.isFile() ) path = near.getParent();
else if ( near.isDirectory() ) path = near.getPath();

Random wheel = new Random(); // seeded from the clock
File tempFile = null;
do
{
// generate random a number 10,000,000 .. 99,999,999
int unique = (wheel.nextInt() & Integer.MAX_VALUE) % 90000000
+ 10000000;
tempFile = new File(path, prepend + Integer.toString(unique)
+ ".tmp");
} while ( tempFile.exists() );

// We "finally" found a name not already used. Nearly always
the first time.
// Quickly stake our claim to it by opening/closing it to create
it.
// In theory somebody could have grabbed it in that tiny window
since
// we checked if it exists, but that is highly unlikely.
new FileOutputStream(tempFile).close();

// DEBUGGING peek at the name generated.
if ( false )
{
System.out.println(tempFile.getCanonicalPath());
}

return tempFile;
} // end getTempFile

/**
* copy inReader to outWriter, processing tabs and line ends
* Presume files already open. Does not close them.
*/
static void processFiles() throws IOException
{
int col = 0; /* 1-based column we have written */
/* 0 = no non-blank chars on line yet */

int pendingSpaces = 0; /* spaces we may later drop or emit */

try
{
while ( true )
{
int c = inReader.read();
if ( c < 0 ) throw new EOFException();
switch ( c )
{
case ' ':
/* save up spaces, so trailing spaces can be
dropped. */
++pendingSpaces;
break;

case '\t':
/* effectively expand tab to 1 to 8 spaces */
pendingSpaces += (TABSPACING - ((col+pendingSpaces)
% TABSPACING));
break;

case '\n':
/* ignore pending/trailing spaces */
if ( !unix ) outWriter.print('\r');
outWriter.print('\n');
col = 0;
pendingSpaces = 0;
break;

case '\r':
/* dos has \r\n, unix just \n */
/* we just ignore them here and generate them as
needed on \n. */
break;

default:
/* ordinary non-blank char */
/* squirt out any pent up spaces */
for ( int i=0; i<pendingSpaces; i++ )
{
outWriter.print(' ');
}
col += pendingSpaces;
pendingSpaces = 0;
/* put out the char itself */
outWriter.print((char)c);
col++;
break;

} /* end switch */
} /* end while */
}
catch ( EOFException e )
{

}
} // end processFiles

/**
* make a noise
*/
static void honk()
{
java.awt.Toolkit.getDefaultToolkit().beep();
// could try System.out.print("\007"); System.out.flush();
} // end honk

/**
* abort the run, clean up as best as possible.
*/
static void die()
{
honk();
try
{
if ( inReader != null ) inReader.close();
if ( outWriter != null ) outWriter.close();
}
catch ( IOException e )
{

}
System.exit(1); /* exit with errorlevel = 1 */
} // end die

} // end class Tabout
 
O

Oliver Wong

Roedy Green said:
here is a little utility you could use to do the job in batch. You
could also do it with a Funduc search/replace script.
[code snipped]

Two suggestions to your program:

(*) Add support for "\r" as a line terminator (some versions of MacOS
use this).
(*) Detect when the input file switches between line terminators. So for
example, if you see both "\r\n" and a lone "\n" within the same file, you're
probably dealing with a "binary" file rather than an text one, so print a
warning.

- Oliver
 
T

Thomas Weidenfeller

david said:
I am working on dos environment for some java files but need to check
in to unix sytem.how to convert dos file to unix file in eclipse?

Many unix systems come with a tool dos2unix. Use it if you have it
instead of re-inventing the wheel.

/Thomas
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,015
Latest member
AmbrosePal

Latest Threads

Top