I am while using Apache POi HSSF library to import info into my application. The issue is the files possess some extra/empty rows that should be removed first before parsing.

There isn't a HSSFSheet.removeRow( int rowNum ) method. Only removeRow( HSSFRow row ). The issue with this particular it that empty rows can not be removed. For instance:

sheet.removeRow( sheet.getRow(rowNum) );

provides a NullPointerException on empty rows because getRow() returns null. Also, when i continue reading forums, removeRow() only removes the cell contents however the row remains being an empty row.

It is possible to method of getting rid of rows (empty or otherwise) without creating another sheet with no rows that I wish to remove?

 /**
 * Remove a row by its index
 * @param sheet a Excel sheet
 * @param rowIndex a 0 based index of removing row
 */
public static void removeRow(HSSFSheet sheet, int rowIndex) {
    int lastRowNum=sheet.getLastRowNum();
    if(rowIndex>=0&&rowIndex<lastRowNum){
        sheet.shiftRows(rowIndex+1,lastRowNum, -1);
    }
    if(rowIndex==lastRowNum){
        HSSFRow removingRow=sheet.getRow(rowIndex);
        if(removingRow!=null){
            sheet.removeRow(removingRow);
        }
    }
}

I am attempting to achieve into the depths of my brain for my POI-related experience from the couple of years ago, but my first question could be: so why do the rows have to be removed before parsing? Why not just catch the null derive from the sheet.getRow(rowNum) call and move ahead?

The HSSFRow includes a method known as setRowNum(int rowIndex).

If you need to "remove" a row, you place that index inside a List. Then, when you are getting to another row non-empty, you are taking a catalog from that list and hang it calling setRowNum(), and take away the index from that list. (Or use a queue)

Something like

int newrownum=0;
for (int i=0; i<=sheet.sheet.getLastRowNum(); i++) {
  HSSFRow row=sheet.getRow(i);
  if (row) row.setRowNum(newrownum++);
}

should have the desired effect.